Aide-mémoire : quelques constructions rapides de block devices

Commandes générales

Lister les block devices

$ lsblk

Connaître la taille d'un device, exprimée en nombre de "secteurs" de 512 octets

# blockdev --getsz <device>

Désactiver un device de type "device mapper" (obtenu via lvm, cryptsetup, dmsetup, mdadm)

# blkdeactivate /dev/mapper/<nom>

Loop device (promouvoir un fichier en block device)

Création

# losetup -f <fichier>

Infos

# losetup -l

Détacher

# losetup -d <device>

Partitionnement

Créer une table de partitions de type msdos ou gpt

# parted <device> mklabel <type>

Créer une partition qui prend la moitié du device

# parted <device> mkpart primary 0% 50%

Créer une partition qui prend la moitié du device, mais aligne correctement ses blocs avec le block device du dessous

# parted <device> mkpart primary 2048s 50%

Créer une partition qui va du 1er MiB au 8e GiB

# parted <device> mkpart primary 1MiB 8GiB

Supprimer la 1ère partition

# parted <device> rm 1

Demander au noyau de mettre à jour sa connaissance des partitions

# partprobe

Si cela ne suffit pas pour un block device "loop" (comportement rencontré sur certaines Ubuntu), il est possible de préciser le device :

# partprobe /dev/loop<n>

Chiffrement

Installer un block device chiffré dans <device>

# cryptsetup luksFormat <device>

Activer (déchiffrer) ce block device, il apparaîtra sous le nom /dev/mapper/<nom>_crypt

# cryptsetup open <device> <nom>

Désactiver (oublier le mot de passe)

# cryptsetup close <nom>

Fusionner deux block devices avec LVM

# pvcreate <device1>
# pvcreate <device2>
# vgcreate <nom_volume> <device1> <device2>
# lvcreate -l 100%VG <nom_volume>

Fusionner trois block devices et les redécouper en 10M, puis moitié-moitié du reste

# pvcreate <device1>
# pvcreate <device2>
# pvcreate <device3>
# vgcreate <nom_volume> <device1> <device2> <device3>
# lvcreate -L 10MiB <nom_volume>
# lvcreate -l 50%FREE <nom_volume>
# lvcreate -l 100%FREE <nom_volume>

Fusion bas niveau (sans lvm2)

TODO.

(un secteur fait 512 octets) d'un device de 100 MiB. Si le device fait 100 MiB, alors il y a 100*1024*1024/512 = 100*1024*2 = 204800 secteurs.

:

Simuler des erreurs (utile pour les tester le comportement d'un programme et sa robustesse aux erreurs)

Alterner une période de 10 secondes sans erreur et une période de 100 secondes avec des erreurs

# dmsetup create <nom> << EOF
0 <taille> flakey <device> 0 10 100

Introduire une erreur permanente au niveau du 9e "secteur"

# dmsetup create <nom> << EOF
0 8 linear <device> 0
8 1 error
9 <taille - 9> linear <device> 9
EOF

Note : le manuel de dmsetup est insuffisant, voir plutôt