जवाबों:
यह aufs की तरह एक संघ फाइलसिस्टम परत का उपयोग करना संभव है ।
डेमो:
# 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
उस माउंट को (केवल पढ़ने के लिए) br
स्टैकिंग /tmp/rammnt
(रीड-राइट) द्वारा एक नई "शाखा" ( ) बनाने का विकल्प /tmp/imgmnt
। इस "शाखा" को (रीड-राइट) फाइलसिस्टम पर दिखाई देता है /tmp/combined
।
( सभी विवरण के लिए aufs (5) मैन पेज देखें।)
अब यह सब हो चुका है, यहाँ आपके पास क्या है:
# 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
तो tmpfs
फाइलसिस्टम में "स्टॉप" लिखते हैं , वे लूप-माउंटेड छवि फ़ाइल पर वापस प्रचार करने का प्रयास नहीं करते हैं।
आप एक सादा निर्देशिका (एक रीड / राइट फाइलसिस्टम पर) का उपयोग कर सकते थे, या संभवत: एक निर्देशिका के तहत /dev/shm
यदि वह आपके लिए काम करता है, इसके बजाय एक विशिष्ट बनाने के tmpfs
लिए।
इस तकनीक (या इसके रूपांतरों) का उपयोग कुछ वितरण LiveCD द्वारा किया जाता है। विकिपीडिया aufs प्रविष्टि कुछ सूचीबद्ध करता है।
/
, तो मेरा मानना है कि आप एक बेहतर बदलाव के साथ बेहतर हैं (ऐसा मेरा मानना है कि यह लाइवकार्ड्स के लिए किया जाता है)। तुम एक init स्क्रिप्ट से यह करने में सक्षम हो सकता है, हालांकि यह मुश्किल लगता है।
ऐसा लगता है कि उबंटू पर ऐसा करने के 2 अन्य सरल तरीके हैं (कम से कम बाद के संस्करण):
सिस्टम को बूट करने योग्य बनाने के चरण सरल हैं। मैं प्रयोग किया जाता है इस गाइड के साथ संयोजन में इस गाइड यह पता लगाने की कैसे यह ठीक से काम, कीड़े के बिना प्राप्त करने के लिए और वेब खोजों के एक झुंड।
सारांश:
चलाएँ:
sudo apt-get install fsprotect apparmor-utils
इसको बचाओ /etc/initramfs-tools/scripts/init-bottom/__rootaufs
। मुझे नहीं लगता कि नाम वास्तव में मायने रखता है, लेकिन शुरुआत __
का उपयोग आदेश देने के लिए किया जा सकता है, इसलिए यदि आप नाम बदलते हैं, तो आप अंडरस्कोर रखना चाह सकते हैं। (यह इस फाइल की एक प्रति है ।)
#!/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
में /etc/default/grub
, उस रेखा को ढूंढें जो कि शुरू होती है GRUB_CMDLINE_LINUX_DEFAULT
, और उद्धरण के अंदर, पैरामीटर जोड़ें aufs=tmpfs
।
बोनस: यदि आपको कभी-कभी अस्थायी रूप से पुनर्निर्देशन बंद करने की आवश्यकता होती है , तो बस इस तर्क को कर्नेल पैरामीटर सूची से हटा दें। GRUB मेनू दिखाने के लिए, सिस्टम बूट होने पर Shift कुंजी दबाकर आप शायद ऐसा कर सकते हैं; फिर मापदंडों को संपादित करने के लिए ई दबाएं , और aufs=...
सूची से पैरामीटर को मिटा दें ।
इन लाइनों को करने के लिए जोड़ें /etc/sysctl.conf
। ( चेतावनी : संभावित सुरक्षा जोखिम।)
kernel.yama.protected_nonaccess_hardlinks = 0
kernel.yama.protected_sticky_symlinks = 0
इन लाइनों को चलाएं:
sudo aa-complain dhclient3
sudo chmod 0755 /etc/initramfs-tools/scripts/init-bottom/__rootaufs
sudo update-initramfs -k all -u
sudo update-grub
यदि सब कुछ ठीक हो जाता है, जब आप रिबूट करते हैं, तो आप एक अस्थायी फ़ाइल सिस्टम में ऐसा करेंगे। रैम भाग में होगा /rw
, और डिस्क छवि पर होगा /ro
, लेकिन निश्चित रूप से यह केवल पढ़ने के लिए होगा।
फिर भी, यदि आपने एक अस्थायी प्रणाली में बूट किया है, लेकिन एक स्थायी परिवर्तन करने की आवश्यकता है, तो आप /ro
कह कर फ़ाइल सिस्टम को फिर से माउंट कर सकते हैं
sudo mount -o remount,rw /ro
इसे लिखने योग्य बनाने के लिए, और फिर आप उस निर्देशिका के लिए जो भी आवश्यक हो, कर सकते हैं।
हां, Unionfs द्वारा, Unionfs.filesystems.org देखें । आपने पहले रीड-ओनली फाइलसिस्टम माउंट किया है, और यूनियनफस के माध्यम से दूसरे रीड-राइट रैम फाइल सिस्टम के रूप में।
उबंटू में आप यूनियनफॉज-फ्यूज पैकेज पा सकते हैं, जो समान चीजों का एक और कार्यान्वयन है, लेकिन उपयोगकर्ता अंतरिक्ष में, कर्नेल मॉड्यूल के रूप में नहीं।
आप इसे डिवाइस स्तर पर भी कर सकते हैं, जैसे कि बिना किसी एफ़यूएस के यूनियनफेश के बिना। डिवाइस-मैपर देखें snapshot-origin
।
fstab
, जैसे कि आरोह बिंदु/
? (यानी तो एक discardable छवि से प्रणाली जूते, काफी।)