12 # Función ficticia para lanzar parted con timeout, evitando cuelgues del programa. 15 timeout -k 5s -s KILL 3s $(which
parted)
"$@" 50 local ND DISK PTTYPE PART SECTORS START SIZE TYPE CACHEPART IODISCO IOSIZE CACHESIZE
51 local EXTSTART EXTSIZE NVME_PREFIX tmpsfdisk
52 # Si se solicita, mostrar ayuda. 53 if [
"$*" ==
"help" ]; then
54 ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk str_parttype:int_partsize ..." \
55 "$FUNCNAME 1 NTFS:10000000 EXT3:5000000 LINUX-SWAP:1000000" 58 # Error si no se reciben al menos 2 parámetros. 61 # Nº total de sectores, para evitar desbordamiento (evitar redondeo). 65 PTTYPE=${PTTYPE:-
"MSDOS"} # Por defecto para discos vacíos.
74 # Se recalcula el nº de sectores del disco 1, si existe partición de caché.
76 [
"$ND" =
"${CACHEPART% *}" ] && CACHESIZE=$(
ogGetCacheSize 2>/dev/null |
awk '{print $0*2}')
78 # Sector de inicio (la partición 1 empieza en el sector 63).
80 IOSIZE=$(
fdisk -l $IODISCO |
awk '/I\/O/ {print $4}')
81 if [
"$IOSIZE" ==
"4096" ]; then
83 SECTORS=$[SECTORS-8192]
84 [ -n
"$CACHESIZE" ] && SECTORS=$[SECTORS-CACHESIZE+2048-(SECTORS-CACHESIZE)%2048-1]
87 [ -n
"$CACHESIZE" ] && SECTORS=$[SECTORS-CACHESIZE]
91 # Fichero temporal de entrada para
"sfdisk" 93 trap
"rm -f $tmpsfdisk" 1 2 3 9 15
95 echo
"unit: sectors" >$tmpsfdisk
99 if [[ $DISK == *
"nvme"* ]]; then
104 # Generar fichero de entrada para "sfdisk" con las particiones. 106 while [ $# -gt 0 ];
do 107 # Conservar los datos de la partición de caché. 108 if [
"$ND $PART" ==
"$CACHEPART" -a -n
"$CACHESIZE" ]; then
109 echo
"$DISK$NVME_PREFIX$PART : start=$[SECTORS+1], size=$CACHESIZE, Id=ca" >>$tmpsfdisk
112 # Leer formato de cada parámetro - Tipo:Tamaño 115 # Obtener identificador de tipo de partición válido. 117 [
"$TYPE" !=
"CACHE" -a -n
"$ID" ] ||
ogRaiseError $OG_ERR_PARTITION
"$TYPE" ||
return $?
118 # Comprobar tamaño numérico y convertir en sectores de 512 B.
119 [[
"$SIZE" == *([0-9]) ]] ||
ogRaiseError $OG_ERR_FORMAT
"$SIZE" ||
return $?
121 # Comprobar si la partición es extendida. 123 [ $PART -le 4 ] ||
ogRaiseError $OG_ERR_FORMAT ||
return $?
124 # El inicio de la primera partición logica es el de la extendida más 4x512 125 let EXTSTART=$START+2048
126 let EXTSIZE=$SIZE-2048
128 # Incluir particiones lógicas dentro de la partición extendida. 129 if [ $PART = 5 ]; then
130 [ -n
"$EXTSTART" ] ||
ogRaiseError $OG_ERR_FORMAT ||
return $?
132 SECTORS=$[EXTSTART+EXTSIZE]
134 # Generar datos para la partición. 135 echo
"$DISK$NVME_PREFIX$PART : start=$START, size=$SIZE, Id=$ID" >>$tmpsfdisk
136 # Error si se supera el nº total de sectores. 138 if [
"$IOSIZE" ==
"4096" -a $PART -gt 4 ]; then
141 [ $START -le $SECTORS ] ||
ogRaiseError $OG_ERR_FORMAT
"$[START/2] > $[SECTORS/2]" ||
return $?
145 # Si no se indican las 4 particiones primarias, definirlas como vacías, conservando la partición de caché. 146 while [ $PART -le 4 ];
do 147 if [
"$ND $PART" ==
"$CACHEPART" -a -n
"$CACHESIZE" ]; then
148 echo
"$DISK$NVME_PREFIX$PART : start=$[SECTORS+1], size=$CACHESIZE, Id=ca" >>$tmpsfdisk
150 echo
"$DISK$NVME_PREFIX$PART : start=0, size=0, Id=0" >>$tmpsfdisk
154 # Si se define partición extendida sin lógicas, crear particion 5 vacía. 155 if [ $PART = 5 -a -n
"$EXTSTART" ]; then
156 echo
"${DISK}5 : start=$EXTSTART, size=$EXTSIZE, Id=0" >>$tmpsfdisk
159 # Desmontar los sistemas de archivos del disco antes de realizar las operaciones. 163 # Si la tabla de particiones no es valida, volver a generarla. 165 # Definir particiones y notificar al kernel. 168 [ -n
"$CACHESIZE" ] &&
ogMountCache 2>/dev/null ||
return 0
194 local ND DISK PART SECTORS ALIGN START SIZE TYPE CACHEPART CACHESIZE DELOPTIONS OPTIONS
195 # Si se solicita, mostrar ayuda. 196 if [
"$*" ==
"help" ]; then
197 ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk str_parttype:int_partsize ..." \
198 "$FUNCNAME 1 NTFS:10000000 EXT3:5000000 LINUX-SWAP:1000000" 201 # Error si no se reciben menos de 2 parámetros. 202 [ $# -ge 2 ] ||
ogRaiseError $OG_ERR_FORMAT ||
return $?
204 # Nº total de sectores, para evitar desbordamiento (evitar redondeo). 207 # Se calcula el ultimo sector del disco (total de sectores usables)
209 # Se recalcula el nº de sectores del disco si existe partición de caché.
211 [
"$ND" =
"${CACHEPART% *}" ] && CACHESIZE=$(
ogGetCacheSize 2>/dev/null |
awk '{print $0*2}')
212 [ -n
"$CACHESIZE" ] && SECTORS=$[SECTORS-CACHESIZE]
213 # Si el disco es GPT empieza en el sector 2048 por defecto, pero podria cambiarse
214 ALIGN=$(sgdisk -D $DISK 2>/dev/null)
218 # Leer parámetros con definición de particionado. 221 while [ $# -gt 0 ];
do 222 # Si PART es la cache, nos la saltamos y seguimos con el siguiente numero para conservar los datos de la partición de caché. 223 if [
"$ND $PART" ==
"$CACHEPART" -a -n
"$CACHESIZE" ]; then
226 # Leer formato de cada parámetro - Tipo:Tamaño 229 # Error si la partición es extendida (no válida en discos GPT). 230 if [
"$TYPE" ==
"EXTENDED" ]; then
234 # Comprobar si existe la particion actual, capturamos su tamaño para ver si cambio o no 236 # En sgdisk no se pueden redimensionar las particiones, es necesario borrarlas y volver a crealas
237 [ $PARTSIZE ] && DELOPTIONS=
"$DELOPTIONS -d$PART" 238 # Creamos la particion
239 # Obtener identificador de tipo de partición válido.
241 [
"$TYPE" !=
"CACHE" -a -n
"$ID" ] ||
ogRaiseError $OG_ERR_PARTITION
"$TYPE" ||
return $?
242 # Comprobar tamaño numérico y convertir en sectores de 512 B. 243 [[
"$SIZE" == *([0-9]) ]] ||
ogRaiseError $OG_ERR_FORMAT
"$SIZE" ||
return $?
245 # SIZE debe ser múltiplo de ALIGN, si no gdisk lo mueve automáticamente.
248 # En el caso de que la partición sea EMPTY no se crea nada
249 if [
"$TYPE" !=
"EMPTY" ]; then
250 OPTIONS=
"$OPTIONS -n$PART:$START:+$SIZE -t$PART:$ID " 253 # Error si se supera el nº total de sectores.
254 [ $START -le $SECTORS ] ||
ogRaiseError $OG_ERR_FORMAT
"$[START/2] > $[SECTORS/2]" ||
return $?
259 # Desmontar los sistemas de archivos del disco antes de realizar las operaciones.
260 ogUnmountAll $ND 2>/dev/null
263 # Si la tabla de particiones no es valida, volver a generarla.
264 ogCreatePartitionTable $ND
265 # Definir particiones y notificar al kernel.
266 # Borramos primero las particiones y luego creamos las nuevas
267 sgdisk $DELOPTIONS $OPTIONS $DISK 2>/dev/null &&
partprobe $DISK
268 [ -n
"$CACHESIZE" ] &&
ogMountCache 2>/dev/null ||
return 0
292 local DISK PTTYPE CREATE CREATEPTT
294 # Si se solicita, mostrar ayuda. 295 if [
"$*" ==
"help" ]; then
296 ogHelp "$FUNCNAME int_ndisk [str_partype]" \
297 "$FUNCNAME 1 GPT" "$FUNCNAME 1" 300 # Error si no se reciben 1 o 2 parámetros. 308 # Capturamos el tipo de tabla de particiones actual 311 PTTYPE=${PTTYPE:-
"MSDOS"} # Por defecto para discos vacíos.
312 CREATEPTT=${CREATEPTT:-
"$PTTYPE"}
314 # Si la tabla actual y la que se indica son iguales, se comprueba si hay que regenerarla. 315 if [
"$CREATEPTT" ==
"$PTTYPE" ]; then
317 GPT) [ ! $(sgdisk -p $DISK 2>&1 >/dev/null) ] || CREATE=
"GPT" ;;
318 MSDOS) [ $(
parted -s $DISK print >/dev/null) ] || CREATE=
"MSDOS" ;;
323 # Dependiendo del valor de CREATE, creamos la tabla de particiones en cada caso. 326 # Si es necesario crear una tabla GPT pero la actual es MSDOS
327 if [
"$PTTYPE" ==
"MSDOS" ]; then
330 echo -e
"2\nw\nY\n" | gdisk $DISK
335 # Si es necesario crear una tabla MSDOS pero la actual es GPT
336 if [
"$PTTYPE" ==
"GPT" ]; then
339 # Crear y borrar una partición para que la tabla se genere bien. 340 echo -e
"o\nn\np\n\n\n\nd\n\nw" |
fdisk $DISK
364 # Si se solicita, mostrar ayuda. 365 if [
"$*" ==
"help" ]; then
366 ogHelp "$FUNCNAME int_ndisk" "$FUNCNAME 1" 369 # Error si no se reciben 1 parámetros. 372 # Obteniendo Identificador linux del disco. 374 # Crear una tabla de particiones vacía.
375 case
"$(ogGetPartitionTableType $1)" in
376 GPT) sgdisk -o $DISK ;;
377 MSDOS) echo -ne
"o\nw" |
fdisk $DISK ;;
406 local CACHEFILE DEV PART NVME_PREFIX d n
407 # Si se solicita, mostrar ayuda. 408 if [
"$*" ==
"help" ]; then
409 ogHelp "$FUNCNAME" "$FUNCNAME path_device | LABEL=str_label | UUID=str_uuid" \
410 "$FUNCNAME /dev/sda => 1" \
411 "$FUNCNAME /dev/sda1 => 1 1" \
412 "$FUNCNAME LABEL=CACHE => 1 4" 416 # Error si no se recibe 1 parámetro. 419 # Obtener dispositivo a partir de camino, etiqueta o UUID. 422 LABEL=*) DEV=$(blkid -L
"${1#*=}") ;;
423 PARTLABEL=*) DEV=$(realpath
"/dev/disk/by-partlabel/${1#*=}" 2>/dev/null) ;;
424 PARTUUID=*) DEV=$(realpath
"/dev/disk/by-partuuid/${1#*=}" 2>/dev/null) ;;
425 UUID=*) DEV=$(blkid -U
"${1#*=}") ;;
428 # Error si no es fichero de bloques o directorio (para LVM). 429 [ -b
"$DEV" -o -d
"$DEV" ] ||
ogRaiseError $OG_ERR_NOTFOUND
"$1" ||
return $?
431 # Buscar en fichero de caché de discos. 432 CACHEFILE=/var/cache/disks.cfg
433 PART=$(
awk -F: -v d=
"$DEV" '{if ($2==d) {print $1}}' $CACHEFILE 2>/dev/null)
434 if [ -n
"$PART" ]; then
438 # Si no se encuentra, procesa todos los discos para devolver su nº de orden y de partición. 442 if [[ $d == *
"nvme"* ]]; then
447 [ -n
"$(echo $DEV | grep $d)" ] && echo
"$n ${DEV#$d$NVME_PREFIX}" &&
return 451 return $OG_ERR_NOTFOUND
487 local CACHEFILE ALLDISKS MPATH VOLGROUPS ZFSVOLS DISK PART ZPOOL i
489 # Si se solicita, mostrar ayuda. 490 if [
"$*" ==
"help" ]; then
491 ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk [int_npartition]" \
492 "$FUNCNAME => /dev/sda /dev/sdb" \
493 "$FUNCNAME 1 => /dev/sda" \
494 "$FUNCNAME 1 1 => /dev/sda1" 498 # Borrar fichero de caché de configuración si hay cambios en las particiones. 499 CACHEFILE=/var/cache/disks.cfg
500 if ! diff -q <(cat /proc/partitions) /tmp/.partitions &>/dev/null; then
501 # Guardar copia de las particiones definidas para comprobar cambios. 502 cp -a /proc/partitions /tmp/.partitions
506 # Si existe una correspondencia con disco/dispositivo en el caché; mostrarlo y salir. 507 PART=$(
awk -F: -v d=
"$*" '{if ($1==d) {print $2}}' $CACHEFILE 2>/dev/null)
508 if [ -n
"$PART" ]; then
513 # Continuar para detectar nuevos dispositivos. 514 # Listar dispositivos de discos. 515 ALLDISKS=$((lsblk -n -e 1,2 -x MAJ:MIN 2>/dev/null || lsblk -n -e 1,2) | \
516 awk '$6~/^disk$/ {gsub(/!/,"/"); printf "/dev/%s ",$1}')
517 #ALLDISKS=$(lsblk -Jdp | jq -r '.blockdevices[] | select(.type=="disk").name') 518 # Listar volúmenes lógicos. 519 VOLGROUPS=$(vgs -a --noheadings 2>/dev/null |
awk '{printf "/dev/%s ",$1}')
520 ALLDISKS=
"$ALLDISKS $VOLGROUPS" 522 # Detectar caminos múltiples (ignorar mensaje si no está configurado Multipath).
523 if MPATH=$(multipath -l -v 1 2>/dev/null |
awk '{printf "/dev/mapper/%s ",$1}'; exit ${PIPESTATUS[0]}); then
524 # Quitar de la lista los discos que forman parte de Multipath. 525 for i in $(multipath -ll |
awk '$6=="ready" {printf "/dev/%s ",$3}');
do 526 ALLDISKS=
"${ALLDISKS//$i/}" 528 # Añadir caminos múltiples a los discos detectados. 529 ALLDISKS=
"$ALLDISKS $MPATH" 532 # Detectar volúmenes ZFS. 533 ZFSVOLS=$(blkid |
awk -F:
'/zfs/ {print $1}')
534 ALLDISKS=
"$ALLDISKS $ZFSVOLS" 536 # Mostrar salidas segun el número de parametros.
538 0) # Muestra todos los discos, separados por espacios.
541 1) # Error si el parámetro no es un número positivo.
542 [[
"$1" =~ ^[1-9][0-9]*$ ]] ||
ogRaiseError $OG_ERR_FORMAT
"$1" ||
return $?
543 DISK=$(echo
"$ALLDISKS" |
awk -v n=$1
'{print $n}')
544 # Error si el fichero no existe. 545 [ -e
"$DISK" ] ||
ogRaiseError $OG_ERR_NOTFOUND
"$1" ||
return $?
546 # Actualizar caché de configuración y mostrar dispositivo. 547 echo
"$*:$DISK" >> $CACHEFILE
550 2) # Error si los 2 parámetros no son números positivos.
551 [[
"$1" =~ ^[1-9][0-9]*$ ]] && [[
"$2" =~ ^[1-9][0-9]*$ ]] ||
ogRaiseError $OG_ERR_FORMAT
"$1 $2" ||
return $?
552 DISK=$(echo
"$ALLDISKS" |
awk -v n=$1
'{print $n}')
553 [ -e
"$DISK" ] ||
ogRaiseError $OG_ERR_NOTFOUND
"$1" ||
return $?
555 # Comprobar si es partición. 556 if [ -b
"$PART" ]; then
557 # Actualizar caché de configuración y mostrar dispositivo. 558 echo
"$*:$PART" >> $CACHEFILE
561 # Comprobar si RAID o Multipath (tener en cuenta enlace simbólico). 563 if [
"$(stat -L -c "%A
" "$PART
" 2>/dev/null | cut -c1)" ==
"b" ]; then
564 # Actualizar caché de configuración y mostrar dispositivo. 565 echo
"$*:$PART" >> $CACHEFILE
569 # Comprobar si volumen lógico. 576 # Comprobar si volumen ZFS que puede ser montado. 578 zpool
import -f -R /mnt -N -a 2>/dev/null
579 ZPOOL=$(blkid -s LABEL -o value $DISK)
580 PART=$(zfs list -Hp -o name,canmount,mountpoint -r $ZPOOL | \
581 awk -v n=$2
'$2=="on" && $3!="none" {c++; if (c==n) print $1}')
583 # Salir si no se encuentra dispositivo. 584 [ -n
"$PART" ] ||
ogRaiseError $OG_ERR_NOTFOUND
"$1 $2" ||
return $?
585 # Devolver camino al dispositivo. 586 # Actualizar caché de configuración y mostrar dispositivo. 587 echo
"$*:$PART" >> $CACHEFILE
592 *) # Formato erroneo.
594 return $OG_ERR_FORMAT
620 # Si se solicita, mostrar ayuda. 621 if [
"$*" ==
"help" ]; then
622 ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk" "$FUNCNAME 1 => 244198584" 625 # Error si no se recibe 1 parámetro. 628 # Obtener el tamaño del disco. 629 DISK=
"$(ogDiskToDev $1)" ||
return $?
630 SIZE=$(
awk -v D=${DISK#/dev/}
'{if ($4==D) {print $3}}' /proc/partitions)
631 # Si no, obtener tamaño del grupo de volúmenes.
632 [ -z
"$SIZE" ] && SIZE=$(vgs --noheadings --units=B -o dev_size $DISK 2>/dev/null | \
633 awk '{print $1/1024}')
636 [ -n
"$SIZE" ] && echo
"$SIZE" 656 # Si se solicita, mostrar ayuda. 657 if [
"$*" ==
"help" ]; then
658 ogHelp "$FUNCNAME" "$FUNCNAME path_device" \
659 "$FUNCNAME /dev/sdb => USB" 662 # Error si no se recibe 1 parámetro. 665 # Obtener el driver del dispositivo de bloques. 666 [ -b
"$1" ] ||
ogRaiseError $OG_ERR_NOTFOUND
"$1" ||
return $?
668 MAJOR=$(
awk -v D=
"$DEV" '{if ($4==D) print $1;}' /proc/partitions)
669 TYPE=$(
awk -v D=$MAJOR
'/Block/ {bl=1} {if ($1==D&&bl) print toupper($2)}' /proc/devices)
670 # Devolver mnemónico del driver de dispositivo. 674 udevadm info -q property $1 2>/dev/null | grep -q
"^ID_BUS=usb" && TYPE=
"USB" 680 TYPE=
"CDROM" # FIXME Comprobar discos IDE.
686 TYPE=
"MAPPER" # FIXME Comprobar LVM y RAID.
700 for d in $(blkid -o device|sort);
do 701 # Previene error para /dev/loop0 702 PART=
"$(ogDevToDisk $d 2>/dev/null)" ||
continue 703 # En discos NVMe blkid devuelve una salida del tipo: 707 # al analizar la particion nvme0n1, PART solo tiene un argumento y hace que ogGetPartitionId lance un error 708 LEN=$(echo $PART |
awk '{ print length($0) }')
709 if [ $LEN -gt 1 ]; then
710 if [
"$(ogGetPartitionId $PART)" ==
"$(ogTypeToId EFI GPT)" ]; then
738 local DISK PART LASTSECTOR
740 # Si se solicita, mostrar ayuda. 741 if [
"$*" ==
"help" ]; then
742 ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk [int_npart]" \
743 "$FUNCNAME 1 => 488392064" \
744 "$FUNCNAME 1 1 => 102400062" 748 # Obtener último sector. 752 LASTSECTOR=$(LANG=C sgdisk -p $DISK |
awk '/last usable sector/ {print($(NF))}')
754 2) # Para una partición.
757 LASTSECTOR=$(LANG=C sgdisk -p $DISK |
awk -v P=
"$2" '{if ($1==P) print $3}')
759 *) # Error si se reciben más parámetros.
785 # Si se solicita, mostrar ayuda. 786 if [
"$*" ==
"help" ]; then
787 ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk" "$FUNCNAME 1 => 1" 790 # Error si no se recibe 1 parámetro. 793 # Comprobar que el disco existe y listar su partición activa. 794 DISK=
"$(ogDiskToDev $1)" ||
return $?
795 LANG=C
parted -sm $DISK print 2>/dev/null |
awk -F:
'$7~/boot/ {print $1}' 826 # Si se solicita, mostrar ayuda. 827 if [
"$*" ==
"help" ]; then
828 ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
832 # Error si no se reciben 2 parámetros. 835 # Detectar y mostrar el id. de tipo de partición. 837 case "$(ogGetPartitionTableType $1)" in
838 GPT) ID=$(sgdisk -p $DISK 2>/dev/null |
awk -v p=
"$2" '{if ($1==p) print $6;}') ||
ogRaiseError $OG_ERR_NOTFOUND
"$1,$2" ||
return $?
839 [
"$ID" ==
"8300" -a
"$1 $2" ==
"$(ogFindCache)" ] && ID=CA00
841 MSDOS) ID=$(
sfdisk --
id $DISK $2 2>/dev/null) ||
ogRaiseError $OG_ERR_NOTFOUND
"$1,$2" ||
return $? ;;
873 # Si se solicita, mostrar ayuda. 874 if [
"$*" ==
"help" ]; then
875 ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
876 "$FUNCNAME 1 1 => 10000000" 879 # Error si no se reciben 2 parámetros. 882 # Devolver tamaño de partición, del volumen lógico o del sistema de archivos (para ZFS). 883 PART=
"$(ogDiskToDev $1 $2)" ||
return $?
884 SIZE=$(partx -gbo SIZE $PART 2>/dev/null |
awk '{print int($1/1024)}')
885 [ -z
"$SIZE" ] && SIZE=$(lvs --noheadings -o lv_size --units k $PART |
awk '{printf "%d",$0}')
919 # Si se solicita, mostrar ayuda. 920 if [
"$*" ==
"help" ]; then
921 ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk" \
925 # Error si no se recibe 1 parámetro. 928 # Contar el nº de veces que aparece el disco en su lista de particiones. 930 case "$(ogGetPartitionTableType $1)" in
932 partx -gso NR $DISK 2>/dev/null |
awk -v p=0
'{p=$1} END {print p}' ;;
933 LVM) lvs --noheadings $DISK 2>/dev/null | wc -l ;;
934 ZPOOL) zpool list &>/dev/null || modprobe zfs
935 zpool
import -f -R /mnt -N -a 2>/dev/null
936 zfs list -Hp -o name,canmount,mountpoint -r $(blkid -s LABEL -o value $DISK) |
\ 937 awk '$2=="on" && $3!="none" {c++} 967 # Si se solicita, mostrar ayuda. 968 if [
"$*" ==
"help" ]; then
969 ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk" \
970 "$FUNCNAME 1 => MSDOS" 973 # Error si no se recibe 1 parámetro. 976 # Sustituye n de disco por su dispositivo. 979 # Comprobar tabla de particiones.
980 if [ -b $DISK ]; then
981 TYPE=$(
parted -sm $DISK print 2>/dev/null |
awk -F: -v D=$DISK
'{ if($1 == D) print toupper($6)}')
982 [ -z
"$TYPE" ] && TYPE=$(
parted -sm $DISK print 2>/dev/null |
awk -F: -v D=$DISK
'{ if($1 == D) print toupper($6)}')
984 # Comprobar si es volumen lógico.
985 [ -d $DISK ] && vgs $DISK &>/dev/null && TYPE=
"LVM" 986 # Comprobar si es pool de ZFS.
987 [ -z
"$TYPE" -o
"$TYPE" ==
"UNKNOWN" ] && [ -n
"$(blkid -s TYPE $DISK | grep zfs)" ] && TYPE=
"ZPOOL" 990 [ -n
"$TYPE" ] && echo
"$TYPE" 1018 # Variables locales. 1021 # Si se solicita, mostrar ayuda. 1022 if [
"$*" ==
"help" ]; then
1023 ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
1024 "$FUNCNAME 1 1 => NTFS" 1027 # Error si no se reciben 2 parámetros. 1028 [ $# == 2 ] ||
ogRaiseError $OG_ERR_FORMAT ||
return $?
1030 # Detectar id. de tipo de partición y codificar al mnemonico. 1055 # Variables locales. 1056 local PART TYPE NEWTYPE
1057 # Si se solicita, mostrar ayuda. 1058 if [
"$*" ==
"help" ]; then
1059 ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
1063 # Error si no se reciben 2 parámetros. 1064 [ $# == 2 ] ||
ogRaiseError $OG_ERR_FORMAT ||
return $?
1067 # Obtener tipo de partición.
1070 NTFS) NEWTYPE=
"HNTFS" ;;
1071 FAT32) NEWTYPE=
"HFAT32" ;;
1072 FAT16) NEWTYPE=
"HFAT16" ;;
1073 FAT12) NEWTYPE=
"HFAT12" ;;
1074 WINDOWS)NEWTYPE=
"WIN-RESERV";;
1078 # Cambiar tipo de partición. 1098 # Si se solicita, mostrar ayuda. 1099 if [
"$*" ==
"help" ]; then
1100 ogHelp "$FUNCNAME" "$FUNCNAME int_idpart" \
1101 "$FUNCNAME 83 => LINUX" 1104 # Error si no se recibe 1 parámetro. 1105 [ $# == 1 ] ||
ogRaiseError $OG_ERR_FORMAT ||
return $?
1107 # Obtener valor hexadecimal de 4 caracteres rellenado con 0 por delante. 1108 ID=$(printf
"%4s" "$1" | tr
' ' '0')
1110 0000) TYPE=
"EMPTY" ;;
1111 0001) TYPE=
"FAT12" ;;
1112 0005|000f) TYPE=
"EXTENDED" ;;
1113 0006|000e) TYPE=
"FAT16" ;;
1114 0007) TYPE=
"NTFS" ;;
1115 000b|000c) TYPE=
"FAT32" ;;
1116 0011) TYPE=
"HFAT12" ;;
1117 0012) TYPE=
"COMPAQDIAG" ;;
1118 0016|001e) TYPE=
"HFAT16" ;;
1119 0017) TYPE=
"HNTFS" ;;
1120 001b|001c) TYPE=
"HFAT32" ;;
1121 0042) TYPE=
"WIN-DYNAMIC" ;;
1122 0082|8200) TYPE=
"LINUX-SWAP" ;;
1123 0083|8300) TYPE=
"LINUX" ;;
1124 008e|8E00) TYPE=
"LINUX-LVM" ;;
1125 00a5|a503) TYPE=
"FREEBSD" ;;
1126 00a6) TYPE=
"OPENBSD" ;;
1127 00a7) TYPE=
"CACHE" ;; # (compatibilidad con Brutalix)
1128 00af|af00) TYPE=
"HFS" ;;
1129 00be|be00) TYPE=
"SOLARIS-BOOT" ;;
1130 00bf|bf0[0145]) TYPE=
"SOLARIS" ;;
1131 00ca|ca00) TYPE=
"CACHE" ;;
1132 00da) TYPE=
"DATA" ;;
1134 00ef|ef00) TYPE=
"EFI" ;;
1135 00fb) TYPE=
"VMFS" ;;
1136 00fd|fd00) TYPE=
"LINUX-RAID" ;;
1137 0700) TYPE=
"WINDOWS" ;;
1138 0c01) TYPE=
"WIN-RESERV" ;;
1139 7f00) TYPE=
"CHROMEOS-KRN" ;;
1140 7f01) TYPE=
"CHROMEOS" ;;
1141 7f02) TYPE=
"CHROMEOS-RESERV" ;;
1142 8301) TYPE=
"LINUX-RESERV" ;;
1143 a500) TYPE=
"FREEBSD-DISK" ;;
1144 a501) TYPE=
"FREEBSD-BOOT" ;;
1145 a502) TYPE=
"FREEBSD-SWAP" ;;
1146 ab00) TYPE=
"HFS-BOOT" ;;
1147 af01) TYPE=
"HFS-RAID" ;;
1148 bf02) TYPE=
"SOLARIS-SWAP" ;;
1149 bf03) TYPE=
"SOLARIS-DISK" ;;
1151 ef02) TYPE=
"BIOS-BOOT" ;;
1152 10000) TYPE=
"LVM-LV" ;;
1153 10010) TYPE=
"ZFS-VOL" ;;
1154 *) TYPE=
"UNKNOWN" ;;
1160 # ogIsDiskLocked int_ndisk 1161 #@brief Comprueba si un disco está bloqueado por una operación de uso exclusivo. 1162 #@param int_ndisk nº de orden del disco 1163 #@return Código de salida: 0 - bloqueado, 1 - sin bloquear o error. 1164 #@note Los ficheros de bloqueo se localizan en \c /var/lock/dev, siendo \c dev el dispositivo de la partición o de su disco, sustituyendo el carácter "/" por "-". 1165 #@version 1.1.0 - Primera versión para OpenGnsys. 1166 #@author Ramon Gomez, ETSII Universidad de Sevilla 1174 # Si se solicita, mostrar ayuda. 1175 if [
"$*" ==
"help" ]; then
1176 ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk" \
1177 "if $FUNCNAME 1; then ... ; fi" 1180 # Falso, en caso de error. 1181 [ $# == 1 ] ||
return 1
1182 DISK=
"$(ogDiskToDev $1 2>/dev/null)" ||
return 1
1184 # Comprobar existencia de fichero de bloqueo para el disco. 1185 LOCKFILE=
"/var/lock/lock${DISK//\//-}" 1206 # Variables locales. 1207 local DISK PART NPARTS TYPE SIZE
1209 # Si se solicita, mostrar ayuda. 1210 if [
"$*" ==
"help" ]; then
1211 ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk" \
1212 "$FUNCNAME 1 => NTFS:10000000 EXT3:5000000 LINUX-SWAP:1000000" 1215 # Error si no se recibe 1 parámetro. 1216 [ $# == 1 ] ||
ogRaiseError $OG_ERR_FORMAT
"$FORMAT" ||
return $?
1218 # Procesar la salida de \c parted . 1219 DISK=
"$(ogDiskToDev $1)" ||
return $?
1221 for (( PART = 1; PART <= NPARTS; PART++ ));
do 1224 echo -n
"$TYPE:$SIZE " 1238 # Variables locales. 1241 # Si se solicita, mostrar ayuda. 1242 if [
"$*" ==
"help" ]; then
1243 ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk" \
1244 "$FUNCNAME 1 => NTFS:10000000 EXT3:5000000 EXTENDED:1000000" 1251 GPT) echo $PARTS | sed
's/\( EMPTY:0\)*$//' ;;
1252 MSDOS) echo $PARTS | cut -sf1-4 -d
" " | sed
's/\( EMPTY:0\)*$//' ;;
1265 # Variables locales. 1268 # Si se solicita, mostrar ayuda. 1269 if [
"$*" ==
"help" ]; then
1270 ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk" \
1271 "$FUNCNAME 1 => LINUX-SWAP:999998" 1275 [
"$PTTYPE" ==
"MSDOS" ] ||
ogRaiseError $OG_ERR_PARTITION
"" ||
return $?
1277 echo $PARTS | cut -sf5- -d
" " 1298 # Si se solicita, mostrar ayuda. 1299 if [
"$*" ==
"help" ]; then
1300 ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk" \
1304 # Error si no se recibe 1 parámetro. 1305 [ $# == 1 ] ||
ogRaiseError $OG_ERR_FORMAT ||
return $?
1307 # Obtener partición. 1308 DISK=
"$(ogDiskToDev $1)" ||
return $?
1310 # Crear archivo de bloqueo exclusivo. 1311 LOCKFILE=
"/var/lock/lock${DISK//\//-}" 1337 # Si se solicita, mostrar ayuda. 1338 if [
"$*" ==
"help" ]; then
1339 ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
1344 # Si el EFI esta activo me salgo. 1347 # Error si no se reciben 2 parámetros. 1348 [ $# == 2 ] ||
ogRaiseError $OG_ERR_FORMAT ||
return $?
1350 # Comprobar que el disco existe y activar la partición indicada. 1351 DISK=
"$(ogDiskToDev $1)" ||
return $?
1352 PART=
"$(ogDiskToDev $1 $2)" ||
return $?
1353 parted -s $DISK
set $2 boot on 2>/dev/null
1382 local DISK PART PTTYPE ID
1384 # Si se solicita, mostrar ayuda. 1385 if [
"$*" ==
"help" ]; then
1386 ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition hex_partid" \
1390 # Error si no se reciben 3 parámetros. 1391 [ $# == 3 ] ||
ogRaiseError $OG_ERR_FORMAT ||
return $?
1393 # Sustituye nº de disco y nº partición por su dispositivo. 1396 # Error si el id. de partición no es hexadecimal. 1398 [[
"$ID" =~ ^[0-9A-F]+$ ]] ||
ogRaiseError $OG_ERR_OUTOFLIMIT
"$3" ||
return $?
1400 # Elección del tipo de partición. 1403 GPT) sgdisk -t$2:$ID $DISK 2>/dev/null ;;
1404 MSDOS)
sfdisk --
id $DISK $2 $ID 2>/dev/null ;;
1409 # MSDOS) Correcto si fdisk sin error o con error pero realiza Syncing 1410 if [
"${PIPESTATUS[1]}" ==
"0" -o $? -eq 0 ]; then
1437 # Variables locales. 1438 local DISK PART SIZE
1440 # Si se solicita, mostrar ayuda. 1441 if [
"$*" ==
"help" ]; then
1442 ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition int_size" \
1443 "$FUNCNAME 1 1 10000000" 1446 # Error si no se reciben 3 parámetros. 1447 [ $# == 3 ] ||
ogRaiseError $OG_ERR_FORMAT ||
return $?
1449 # Obtener el tamaño de la partición. 1450 DISK=
"$(ogDiskToDev $1)" ||
return $?
1451 PART=
"$(ogDiskToDev $1 $2)" ||
return $?
1452 # Convertir tamaño en KB a sectores de 512 B. 1453 SIZE=$[$3*2] ||
ogRaiseError $OG_ERR_FORMAT ||
return $?
1454 # Redefinir el tamaño de la partición. 1455 sfdisk -f -uS -N$2 $DISK <<<
",$SIZE" &>/dev/null ||
ogRaiseError $OG_ERR_PARTITION
"$1,$2" ||
return $?
1481 local DISK PART PTTYPE ID
1483 # Si se solicita, mostrar ayuda. 1484 if [
"$*" ==
"help" ]; then
1485 ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_type" \
1486 "$FUNCNAME 1 1 NTFS" 1489 # Error si no se reciben 3 parámetros. 1490 [ $# == 3 ] ||
ogRaiseError $OG_ERR_FORMAT ||
return $?
1492 # Sustituye nº de disco por su dispositivo. 1496 # Elección del tipo de partición. 1499 [ -n
"$ID" ] ||
ogRaiseError $OG_ERR_FORMAT
"$3,$PTTYPE" ||
return $?
1527 # Si se solicita, mostrar ayuda. 1528 if [
"$*" ==
"help" ]; then
1529 ogHelp "$FUNCNAME" "$FUNCNAME str_parttype [str_tabletype]" \
1530 "$FUNCNAME LINUX => 83" \
1531 "$FUNCNAME LINUX MSDOS => 83" 1534 # Error si no se reciben 1 o 2 parámetros. 1535 [ $# -lt 1 -o $# -gt 2 ] && (
ogRaiseError $OG_ERR_FORMAT;
return $?)
1537 # Asociar
id. de partición para su mnemónico.
1538 PTTYPE=${2:-
"MSDOS"}
1540 GPT) # Se incluyen mnemónicos compatibles con tablas MSDOS.
1543 WINDOWS|NTFS|EXFAT|FAT32|FAT16|FAT12|HNTFS|HFAT32|HFAT16|HFAT12)
1545 WIN-RESERV) ID=0C01 ;;
1546 CHROMEOS-KRN) ID=7F00 ;;
1547 CHROMEOS) ID=7F01 ;;
1548 CHROMEOS-RESERV) ID=7F02 ;;
1549 LINUX-SWAP) ID=8200 ;;
1550 LINUX|EXT[234]|REISERFS|REISER4|XFS|JFS)
1552 LINUX-RESERV) ID=8301 ;;
1553 LINUX-LVM) ID=8E00 ;;
1554 FREEBSD-DISK) ID=A500 ;;
1555 FREEBSD-BOOT) ID=A501 ;;
1556 FREEBSD-SWAP) ID=A502 ;;
1558 HFS-BOOT) ID=AB00 ;;
1559 HFS|HFS+) ID=AF00 ;;
1561 HFS-RAID) ID=AF01 ;;
1562 SOLARIS-BOOT) ID=BE00 ;;
1564 SOLARIS-SWAP) ID=BF02 ;;
1565 SOLARIS-DISK) ID=BF03 ;;
1568 LINUX-RAID) ID=FD00 ;;
1584 LINUX-SWAP) ID=82 ;;
1585 LINUX|EXT[234]|REISERFS|REISER4|XFS|JFS)
1591 SOLARIS-BOOT) ID=be ;;
1598 LINUX-RAID) ID=fd ;;
1608 ZFS-VOL) ID=10010 ;;
1634 # Variables locales. 1635 local PART TYPE NEWTYPE
1636 # Si se solicita, mostrar ayuda. 1637 if [
"$*" ==
"help" ]; then
1638 ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
1642 # Error si no se reciben 2 parámetros. 1643 [ $# == 2 ] ||
ogRaiseError $OG_ERR_FORMAT ||
return $?
1646 # Obtener tipo de partición.
1649 HNTFS) NEWTYPE=
"NTFS" ;;
1650 HFAT32) NEWTYPE=
"FAT32" ;;
1651 HFAT16) NEWTYPE=
"FAT16" ;;
1652 HFAT12) NEWTYPE=
"FAT12" ;;
1653 WIN-RESERV) NEWTYPE=
"WINDOWS" ;;
1657 # Cambiar tipo de partición. 1679 # Si se solicita, mostrar ayuda. 1680 if [
"$*" ==
"help" ]; then
1681 ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk" \
1685 # Error si no se recibe 1 parámetro. 1686 [ $# == 1 ] ||
ogRaiseError $OG_ERR_FORMAT ||
return $?
1688 # Obtener partición. 1689 DISK=
"$(ogDiskToDev $1)" ||
return $?
1691 # Borrar archivo de bloqueo exclusivo. 1692 LOCKFILE=
"/var/lock/lock${DISK//\//-}" function ogDiskToDev()
Devuelve la equivalencia entre el nº de orden del dispositivo (dicso o partición) y el nombre de fich...
function ogIsEfiActive()
Comprueba si el sistema tiene activo el arranque EFI.
function ogListLogicalPartitions()
Metafunción que lista las particiones lógicas de una tabla tipo MSDOS. #.
function ogSetPartitionId()
Cambia el identificador de la partición. #.
function ogGetPartitionSize()
Muestra el tamano en KB de una particion determinada. #.
function ogIsDiskLocked()
function ogDevToDisk()
Devuelve el nº de orden de dicso (y partición) correspondiente al nombre de fichero de dispositivo o ...
function ogGetPartitionId()
Devuelve el mnemónico con el tipo de partición. #.
function ogGetDiskType()
Muestra el tipo de disco (real, RAID, meta-disco, USB, etc.). #.
function ogGetPartitionTableType()
Devuelve el tipo de tabla de particiones del disco (GPT o MSDOS) #.
function ogRaiseError()
Devuelve el mensaje y el código de error correspondiente. #.
function ogDeletePartitionTable()
Borra la tabla de particiones del disco. #.
function ogHelp()
Muestra mensaje de ayuda para una función determinda. #.
function ogUnmountCache()
Desmonta la particion Cache y elimina la variable $OGCAC #.
function ogTypeToId()
Devuelve el identificador correspondiente a un tipo de partición. #.
function ogGetFsSize()
Muestra el tamanio del sistema de archivos indicado, permite definir la unidad de medida...
function ogGetPartitionActive()
Muestra que particion de un disco esta marcada como de activa. #.
function ogGetCacheSize()
Devuelve el tamaño definido para la partición de caché. #.
function ogIdToType()
Devuelve el identificador correspondiente a un tipo de partición. #.
function ogCreatePartitionTable()
Genera una tabla de particiones en caso de que no sea valida, si es valida no hace nada...
function ogListPrimaryPartitions()
Metafunción que lista las particiones primarias no vacías de un disco. #.
function ogSetPartitionSize()
Muestra el tamano en KB de una particion determinada. #.
function ogGetPartitionType()
Devuelve el mnemonico con el tipo de partición. #.
function ogHidePartition()
Oculta un apartición visible. #.
function ogGetLastSector()
Devuelve el último sector usable del disco o de una partición. #.
function ogUpdatePartitionTable()
Fuerza al kernel releer la tabla de particiones de los discos duros #.
function ogMountCache()
Monta la partición Cache y exporta la variable $OGCAC #.
function ogUnlockDisk()
Elimina el fichero de bloqueo para un disco. #.
function ogSetPartitionActive()
Establece cual es la partición activa de un disco. #.
function ogFindCache()
Detecta la partición caché local. #.
function ogSetPartitionType()
Cambia el identificador de la partición. #.
function ogUnmountAll()
Desmonta todos los sistema de archivos de un disco, excepto el caché local. #.
function ogListPartitions()
Lista las particiones definidas en un disco. #.
function ogCheckStringInGroup()
Función para determinar si el elemento pertenece a un conjunto #.
function ogLockDisk()
Genera un fichero de bloqueo para un disco en uso exlusivo. #.
function ogUnhidePartition()
Hace visible una partición oculta. #.
function ogCreateGptPartitions()
Define el conjunto de particiones de un disco GPT #.
function ogGetPartitionsNumber()
Detecta el numero de particiones del disco duro indicado. #.
function ogGetEsp()
Devuelve números de disco y partición para la partición EFI (ESP).
function ogEcho()
Muestra mensajes en consola y lo registra en fichero de incidencias. #.
function ogGetDiskSize()
Muestra el tamaño en KB de un disco. #.
function ogCreatePartitions()
Define el conjunto de particiones de un disco. #.