Estoy escribiendo una instalación automatizada personalizada usando AIF (Arch Installation Framework), y necesito encontrar el sistema de archivos en una partición dada una partición.
Hasta ahora tengo esto:
grok_partitions () {
local partitions=
for label in `ls /dev/disk/by-label | grep "Arch"`
do
if [ $label == "Arch" ]
then
mount_point="/"
else
IFS="-" read base mount <<< "${label}"
mount_point="/${mount}"
fi
local partition=$(readlink -f /dev/disk/by-label/${label})
local part_no=$(echo ${partition} | grep -Po '\d+')
local fs=$(parted -mls | grep "^${part_no}" | cut -d: -f5)
partitions+="${partition} raw ${label} ${fs};yes;${mount_point};target;no_opts;${label};no_params\n"
done
# do the swap
if [ -e /dev/disk/by-label/swap ]
then
local partition=$(readlink -f /dev/disk/by-label/swap)
partitions+="$partition raw swap swap;yes;no_mountpoint;target;no_opts;swap;no_params"
else
# if there's no labeled swap, use the first one we find
local partition=$(fdisk -l | grep -m1 swap | awk '{ print $1 }')
if [ ! -e $partition ]
then
echo "No swap detected. Giving up."
exit 1
fi
partitions+="$partition raw no_label swap;yes;no_mountpoint;target;no_opts;no_label;no_params"
fi
echo -n ${partitions}
}
Esto funcionó bien en mi máquina con solo un disco duro, pero falló (obviamente) cuando se ejecutaba en mi VM ejecutándose en un LiveCD (el LiveCD se estaba recogiendo como otra unidad, / dev / sr0).
He pensado en un par de trucos que podría probar:
mount $partition; grep $partition /etc/mtab | awk ...
- uso
parted -mls
, pero extraiga la partición que me interesa con secuencias de comandos inteligentes, luego analice como ya lo hago en la secuencia de comandos
¿Hay una manera mejor y más simple de hacer esto? Ya tengo las particiones que me interesan, y solo necesito encontrar sus sistemas de archivos (así como encontrar el intercambio disponible).
command-line
filesystems
system-installation
block-device
beatgammit
fuente
fuente
Respuestas:
Creo que encontré la respuesta:
blkid
Desde la página del manual:
Aparentemente imprime el nombre del dispositivo junto con el tipo de sistema de archivos (junto con alguna otra información útil). Para obtener una lista de todos los dispositivos con sus tipos:
Para encontrar todos los
/dev/sd*/
dispositivos, solo agregue un grep:Entonces solo
cut
oawk
para obtener lo que necesita.fuente
blkid -s TYPE -o value /dev/sda3
sudo
si no es root! Este me sorprendió porqueblkid
no imprime ningún mensaje de error y sale con el código de estado 0 si no puede acceder a dispositivos de bloqueo ...grep
ased
.grep foo | sed 's/pattern/repl/'
está más limpiamente escritosed '/foo/s/pattern/repl/'
file -s /path/to/device
identificará el sistema de archivos en un disco / partición / segmento.A la:
al menos, en Linux lo hace.
fuente
| cut -d: -f2 | cut -d( -f1
o algo así. No es tan bonito comoblkid
, eso es seguro. :)Muestre solo la etiqueta TYPE del dispositivo de bloque y solo muestre su valor:
Ejemplo:
fuente
Una opción secundaria que funciona con muchos sistemas de archivos y tiene la ventaja de trabajar incluso con sistemas de archivos que tienen estructuras dañadas es
testdisk
. (Puedes ejecutarlosudo apt install testdisk
para instalarlo).Escríbelo para devolver solo el tipo de sistema de archivos como este:
fuente