J'ai Ubuntu 12.10 (pas de mises à jour, noyau 3.5.0-17 générique) sur le premier disque dur (sda), qui utilise MBR et a été partitionné en tant que "Utiliser le disque entier pour Ubuntu" avec LVM2 activé. Le système de fichiers racine est sur LVM2 (VG: ubuntu). Aujourd'hui, j'ai ajouté un deuxième disque dur (sdb) de même taille, partitionné comme le premier disque dur, créé un PV de 2 m2 et converti le LV racine en raid1:
pvcreate /dev/sdb5
vgextend ubuntu /dev/sdb5
lvconvert --type raid1 -m1 /dev/ubuntu/root /dev/sdb5
Après une resynchronisation à 100%, j'ai redémarré et initramfs n'a pas pu trouver le fichier racine:
Begin: Running /scripts/init-premount ... done.
Begin: Mounting root file system ... Begin: Running /scripts/local-top ... done.
... (kernel messages)
Gave up waiting for root device. Common problems:
- Boot args (cat /proc/cmdline)
- Check rootdelay= (did the system wait long enough?)
- Check root= (did the system wait for the right device?)
- Missing modules (cat /proc/modules; ls /dev)
ALERT! /dev/mapper/ubuntu-root does not exist.
Dropping to a Shell!
Il y a une liste de modules:
(initramfs) cat /proc/modules
hid_generic
usbhid
hid
e1000
raid10
raid456
async_pq
async_xor
xor
async_memcpy
async_raid6_recov
raid6_pq
async_tx
raid1
raid0
multipath
linear
(initramfs) cat /proc/cmdline
BOOT_IMAGE=/vmlinux-3.5.0-17-generic root=/dev/mapper/ubuntu-root ro
(initramfs) ls /dev/mapper
control ubuntu-swap_1
Il y a une sortie de l'utilitaire lvm
:
lvm> pvscan
PV /dev/sda5 VG ubuntu lvm2 [ 13.76 GiB / 408.00 MiB free]
PV /dev/sdb5 VG ubuntu lvm2 [ 13.76 GiB / 508.00 MiB free]
lvm> vgscan
Reading all physical volumes. This may take a while...
Found volume group "ubuntu" using metadata type lvm2
lvm> lvscan
inactive '/dev/ubuntu/root' [13.26 GiB] inherit
ACTIVE '/dev/ubuntu/swap_1' [100.00 MiB] inherit
lvm> lvdisplay ubuntu
--- Logical volume ---
LV Path /dev/ubuntu/root
LV Name root
VG Name ubuntu
LV UUID xxxxxxxxxxxxxxx
LV Write Access read/write
LV Creation Host, time ubuntu, 2013-05-07
LV Status NOT available <<<<< !!!!
LV Size 13.26 GB
Current LE 3394
Mirrored volumes 2
Segments 1
Allocation inherit
Read ahead sectors auto
Et lvchange -ay ubuntu
échoue:
lvm> lvchange -ay ubuntu
/sbin/modprobe failed: 1
Can't process LV root: raid1 target support missing from kernel?
Que manque-t-il à initrd?
J'ai rencontré le même problème sur mon système Debian; il s'est avéré que certains modules nécessaires ne sont pas installés dans initramfs.
Plus précisément, après avoir ajouté ces lignes à/etc/initramfs-tools/modules:
dm_mirror
dm_raid
dm_region_hash
et courir
update-initramfs -u -k all
mon système démarre correctement.
Notez que je n'ai pas vérifié que toutes ces lignes sont réellement nécessaires. Je pense que le module dm_raid manque au moins par défaut.
Après une recherche plus approfondie, un bogue Debian s'est ouvert contre initramfs-tools suite à ce problème: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=699804
Une autre option consiste à utiliser le type mirror
à la place du raid1
. Cela devrait fonctionner par défaut, même grub2 le supporte. Donc au lieu de
lvconvert --type raid1 -m1 /dev/ubuntu/root /dev/sdb5
faire ceci:
lvconvert --type mirror -m1 /dev/ubuntu/root /dev/sdb5
(Vous n'avez pas besoin de spécifier sdb5
à la fin, LVM choisira un PV approprié pour mettre le miroir.)
Le type de miroir présente toutefois un inconvénient majeur: il lit uniquement à partir du premier périphérique. Par conséquent, vous n'obtiendrez pas l'accélération des performances de lecture attendue de RAID1.