Yanıtlar:
Aufs gibi bir birleşim dosya sistemi katmanı kullanmak mümkündür .
Demo:
# dd if=/dev/zero of=/tmp/image bs=1024 count=1024
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB) copied, 0.0028428 s, 369 MB/s
# mke2fs /tmp/image
...
# mkdir /tmp/imgmnt
# mount -o loop /tmp/image /tmp/imgmnt
# echo hello > /tmp/imgmnt/hello.txt
# umount /tmp/imgmnt
# mount -o loop,ro /tmp/image /tmp/imgmnt
# echo blah > /tmp/imgmnt/hello.txt
-su: /tmp/imgmnt/hello.txt: Read-only file system
# mkdir /tmp/rammnt
# mount -t tmpfs -o size=1M none /tmp/rammnt
# mkdir /tmp/combined
# mount -t aufs -o br:/tmp/rammnt:/tmp/imgmnt=ro none /tmp/combined
Bu mount seçeneği yeni bir "şube" ( br
) oluşturarak /tmp/rammnt
(salt okunur) üstüne koyarak (okuma-yazma /tmp/imgmnt
). Bu "şube" açık (okuma-yazma) dosya sistemi olarak görünür hale getirilir /tmp/combined
.
(Tüm detaylar için aufs (5) kılavuz sayfasına bakınız.)
Şimdi bunların hepsi yapıldı, işte sahip olduklarınız:
# ls /tmp/combined
hello.txt lost+found
# cat /tmp/combined/hello.txt
hello
# echo bye > /tmp/combined/hello.txt
# cat /tmp/combined/hello.txt
bye
# cat imgmnt/hello.txt
hello
# cat rammnt/hello.txt
bye
Bu yüzden tmpfs
dosya sisteminde "dur" yazar , tekrar döngüye monte edilmiş görüntü dosyasına yayılmaya çalışmazlar.
Düz bir dizin (bir okuma / yazma dosya sisteminde) veya /dev/shm
bunun için belirli bir şey oluşturmak yerine, bunun sizin için işe yarayıp yaramadığını içeren bir dizin tmpfs
kullanabilirsiniz.
Bu teknik (veya varyasyonları), bazı dağıtım LiveCD'leri tarafından kullanılır. Vikipedi aufs giriş birkaç listeler.
/
, initrd ile daha iyi olduğunuza inanıyorum (inanıyorum, bu şekilde inanıyorum. Zor olsa da bunu bir init betiğinden de yapabilirsin.
Ubuntu'da bunu yapmanın daha basit iki yolu var (en azından sonraki sürümler):
Bir sistemi önyüklenebilir hale getirme adımları basittir. Kullandığım bu kılavuzu ile birlikte bu kılavuzun bu hatalar olmadan, düzgün çalışmıyor nasıl anlamaya ve web aramalarının bir demet.
Özet:
Koşmak:
sudo apt-get install fsprotect apparmor-utils
Bunu sakla /etc/initramfs-tools/scripts/init-bottom/__rootaufs
. Adın gerçekten önemli olduğunu sanmıyorum, ancak başlangıç __
sipariş vermek için kullanılabilir, bu nedenle adı değiştirirseniz, alt çizgileri korumak isteyebilirsiniz. (Bu, bu dosyanın bir kopyasıdır .)
#!/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
# 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
İçinde /etc/default/grub
başlayan satırı GRUB_CMDLINE_LINUX_DEFAULT
ve ardından gelen tırnakların içine parametreyi ekleyin aufs=tmpfs
.
Bonus: Yönlendirmeyi ara sıra geçici olarak kapatmanız gerekirse, bu argümanı çekirdek parametre listesinden kaldırın. GRUB menüsünü göstermek için, sistem önyüklenirken Shift tuşunu basılı tutarak büyük olasılıkla bunu yapabilirsiniz; sonra parametreleri düzenlemek için e tuşuna basın ve aufs=...
parametreyi listeden silin .
Bu satırları şuna ekle /etc/sysctl.conf
. ( Uyarı : Potansiyel güvenlik riski.)
kernel.yama.protected_nonaccess_hardlinks = 0
kernel.yama.protected_sticky_symlinks = 0
Bu satırları çalıştır:
sudo aa-complain dhclient3
sudo chmod 0755 /etc/initramfs-tools/scripts/init-bottom/__rootaufs
sudo update-initramfs -k all -u
sudo update-grub
Her şey yolunda giderse, yeniden başlattığınızda, bunu geçici bir dosya sistemine girmiş olursunuz. RAM bölümü /rw
ve disk görüntüsü de olacak /ro
, fakat elbette salt okunur olacak.
Bununla birlikte, geçici bir sisteme önyükleme yaptıysanız ancak kalıcı bir değişiklik yapmanız gerekiyorsa, /ro
dosya sistemini söyleyerek yeniden takabilirsiniz.
sudo mount -o remount,rw /ro
yazılabilir yapmak ve sonra bu dizinde gerekli değişiklikleri yapabilirsiniz.
Evet, unionfs tarafından bkz. Unionfs.filesystems.org . İlk önce salt okunur dosya sistemini, ikincil olarak ise unionfs aracılığıyla okuma-yazma RAM dosya sistemini bağladınız.
Ubuntu'da, aynı şeylerin bir başka uygulaması olan unionfs-fuse paketini bulabilirsiniz, ancak kullanıcı alanında, çekirdek modülü olarak değil.
Bunu, aufs gibi bir sendika olmadan, cihaz seviyesinde de yapabilirsiniz. Cihaz eşleyicisine bakınız snapshot-origin
.
fstab
, montaj noktası öyle/
mi? (yani sistem hemen hemen göz ardı edilebilecek bir görüntüden önyüklenir.)