J'écris une installation automatisée personnalisée en utilisant AIF (Arch Installation Framework), et j'ai besoin de trouver le système de fichiers sur une partition donnée une partition.
Jusqu'à présent, j'ai ceci:
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}
}
Cela a bien fonctionné sur ma machine avec un seul disque dur, mais cela a échoué (évidemment) lors de l'exécution dans ma machine virtuelle fonctionnant sur un LiveCD (le LiveCD était récupéré comme un autre lecteur, / dev / sr0).
J'ai pensé à quelques astuces que je pourrais essayer:
mount $partition; grep $partition /etc/mtab | awk ...
- utiliser
parted -mls
, mais retirez la partition qui m'importe avec un script intelligent, puis analysez comme je le fais déjà dans le scriptt
Existe-t-il une manière meilleure et plus simple de procéder? J'ai déjà les partitions qui m'intéressent et j'ai seulement besoin de trouver leurs systèmes de fichiers (ainsi que de trouver les swaps disponibles).
Réponses:
Je pense avoir trouvé la réponse:
blkid
Depuis la page de manuel:
Apparemment, il imprime le nom du périphérique avec le type de système de fichiers (ainsi que d'autres informations utiles). Pour obtenir une liste de tous les appareils avec leurs types:
Pour trouver tous les
/dev/sd*/
appareils, ajoutez simplement un grep:Alors juste
cut
ouawk
pour obtenir ce dont vous avez besoin.la source
blkid -s TYPE -o value /dev/sda3
sudo
si vous n'êtes pas root! Celui-ci m'a rattrapé carblkid
n'imprime aucun message d'erreur et se termine avec le code d'état 0 s'il ne peut pas accéder aux périphériquesgrep
verssed
.grep foo | sed 's/pattern/repl/'
est plus clairement écritsed '/foo/s/pattern/repl/'
file -s /path/to/device
identifiera le système de fichiers sur un disque / partition / tranche.À la:
du moins, sous Linux, c'est le cas.
la source
| cut -d: -f2 | cut -d( -f1
ou quelque chose. Ce n'est pas aussi joli queblkid
, c'est sûr. :)Afficher uniquement la balise TYPE du périphérique de bloc et afficher uniquement sa valeur:
Exemple:
la source
Une option secondaire qui fonctionne avec de nombreux systèmes de fichiers et a l'avantage de fonctionner même avec des systèmes de fichiers dont les structures sont endommagées est
testdisk
. (Vous pouvez exécutersudo apt install testdisk
pour l'installer.)Créez un script pour renvoyer uniquement le type de système de fichiers comme ceci:
la source