Bonjour,
Après quelques kernel panic en essayant modifier le fichier initrd/init à la main… j’ai trouvé cette méthode http://ubuntuforums.org/showthread.php?t=787316 qui fonctionne bien après 2 petites modifications. J’ai testé avec une debian squeeze sur un petit disque dur. Je détaille la méthode, ça peut toujours servir à quelqu’un:
1. Créer un fichier dans le répertoire /etc/initramfs-tools/scripts/init-bottom/
Je l’ai appelé aufsroot et j’ai remplacé la commande modprobe -Qb aufs qui n’était pas reconnue, par modprobe aufs
[code]#!/bin/sh -e
case $1 in
prereqs)
exit 0
;;
esac
for x in $(cat /proc/cmdline); do
case $x in
root=)
ROOTNAME=${x#root=}
;;
aufs=)
UNION=${x#aufs=}
case $UNION in
LABEL=)
UNION="/dev/disk/by-label/${UNION#LABEL=}"
;;
UUID=)
UNION="/dev/disk/by-uuid/${UNION#UUID=}"
;;
esac
;;
esac
done
if [ -z “$UNION” ]; then
exit 0
fi
modprobe aufs
make the mount points on the init root file system
mkdir /aufs /ro /rw
mount read-write file system
if [ “$UNION” = “tmpfs” ]; then
mount -t tmpfs rw /rw -o noatime,mode=0755
else
mount $UNION /rw -o noatime
fi
move real root out of the way
mount --move ${rootmnt} /ro
mount -t aufs aufs /aufs -o noatime,dirs=/rw:/ro=ro
test for mount points on union file system
[ -d /aufs/ro ] || mkdir /aufs/ro
[ -d /aufs/rw ] || mkdir /aufs/rw
mount --move /ro /aufs/ro
mount --move /rw /aufs/rw
strip fstab off of root partition
grep -v $ROOTNAME /aufs/ro/etc/fstab > /aufs/etc/fstab
mount --move /aufs /root
exit 0[/code]
2. Ajouter le module aufs dans le fichier /etc/initramfs-tools/modules
(et pas dans /etc/initramfs-tools/scripts/modules)
[code]# List of modules that you want to include in your initramfs.
They will be loaded at boot time in the order below.
Syntax: module_name [args …]
You must run update-initramfs(8) to effect this change.
Examples:
raid1
sd_mod
aufs[/code]
3. Faire une copie de l’initrd et reconstruire l’image initramfs
cp /boot/initrd.img-2.6.32-5-686 /boot/initrd.img-2.6.32-5-686_orig
update-initramfs -u
4. Modifier le fichier /boot/grub/grub.cfg
Pour ajouter une nouvelle entrée dans le grub pour l’initrd “original” (c’est juste une précaution) et ajouter un paramètre au noyau : aufs=tmpfs. on peut aussi indiquer une partition en lecture-écriture, mais je n’ai pas encore testé : aufs=<your_union_rw_partition>
menuentry 'Debian GNU/Linux, avec Linux 2.6.32-5-686 (ORIGINAL)' --class debian --class gnu-linux --class gnu --class os {
insmod part_msdos
insmod ext2
set root='(hd1,msdos1)'
search --no-floppy --fs-uuid --set f0d0225b-7c63-4539-8ac9-e625d43fdae5
echo 'Chargement de Linux 2.6.32-5-686 ...'
linux /boot/vmlinuz-2.6.32-5-686 root=UUID=f0d0225b-7c63-4539-8ac9-e625d43fdae5 ro quiet
echo 'Chargement du disque mémoire initial ...'
initrd /boot/initrd.img-2.6.32-5-686_orig
}
menuentry 'Debian GNU/Linux, avec Linux 2.6.32-5-686 (AVEC AUFS/TMPFS)' --class debian --class gnu-linux --class gnu --class os {
insmod part_msdos
insmod ext2
set root='(hd1,msdos1)'
search --no-floppy --fs-uuid --set f0d0225b-7c63-4539-8ac9-e625d43fdae5
echo 'Chargement de Linux 2.6.32-5-686 ...'
linux /boot/vmlinuz-2.6.32-5-686 root=UUID=f0d0225b-7c63-4539-8ac9-e625d43fdae5 ro quiet aufs=tmpfs
echo 'Chargement du disque mémoire initial ...'
initrd /boot/initrd.img-2.6.32-5-686
}
5. Vérification…
On reboote sur le noyau modifié. Les partitions sont correctement attachées :
rootfs / rootfs rw 0 0
none /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
none /proc proc rw,nosuid,nodev,noexec,relatime 0 0
none /dev devtmpfs rw,relatime,size=507496k,nr_inodes=126874,mode=755 0 0
none /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
/dev/disk/by-uuid/f0d0225b-7c63-4539-8ac9-e625d43fdae5 /ro ext3 ro,relatime,errors=continue,data=ordered 0 0
rw /rw tmpfs rw,noatime,mode=755 0 0
aufs / aufs rw,relatime,si=54694483 0 0
tmpfs /lib/init/rw tmpfs rw,nosuid,relatime,mode=755 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev,relatime 0 0
/dev/sda4 /home ext4 rw,relatime,barrier=1,data=ordered 0 0
tmpfs /tmp tmpfs rw,noatime 0 0
tmpfs /var/tmp tmpfs rw,noatime 0 0
tmpfs /var/log tmpfs rw,noatime,mode=755 0 0
tmpfs /var/run tmpfs rw,noatime,mode=755 0 0
tmpfs /var/lock tmpfs rw,noatime,mode=755 0 0
nfsd /proc/fs/nfsd nfsd rw,relatime 0 0
On vérifie que les modifications se font bien sur le ramdisk /rw :
#du -s -h /rw
76K /rw
#free
total used free shared buffers cached
Mem: 1024060 96340 927720 0 7032 43144
-/+ buffers/cache: 46164 977896
Swap: 3906552 0 3906552
et après copie d’un fichier d’environ 20 Mo :
#du -s -h /rw
20M /rw
#free
total used free shared buffers cached
Mem: 1024060 116440 907620 0 7032 63300
-/+ buffers/cache: 46108 977952
Swap: 3906552 0 3906552
Parfait ! Les modifications se font bien en ram !
Maintenant, il reste à tester avec une partition en rw au lieu du tmpfs et faire un script pour synchroniser les 2 branches…
Jd