Czy można zamontować plik pętli zwrotnej tylko do odczytu i przekierować wszystkie zapisy do pamięci RAM?
źródło
Czy można zamontować plik pętli zwrotnej tylko do odczytu i przekierować wszystkie zapisy do pamięci RAM?
Jest to możliwe przy użyciu unijnej warstwy systemu plików, takiej jak aufs .
Próbny:
# 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
Ta opcja montowania pozwala utworzyć nową „gałąź” ( br
) przez umieszczenie na stosie /tmp/rammnt
(tylko do odczytu i zapisu) na górze /tmp/imgmnt
(tylko do odczytu). Ta „gałąź” jest widoczna jako system plików (do odczytu i zapisu) /tmp/combined
.
(Zobacz wszystkie strony man aufs (5) ).
Teraz wszystko, co zostało zrobione, oto co masz:
# 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
Tak więc zapisuje „stop” w tmpfs
systemie plików, nie próbują propagować z powrotem do pliku obrazu zamontowanego w pętli.
Mógłbyś użyć zwykłego katalogu (w systemie plików do odczytu / zapisu) lub ewentualnie katalogu poniżej, /dev/shm
jeśli to działa dla ciebie, zamiast tworzenia specyficznego tmpfs
dla tego.
Ta technika (lub jej odmiany) jest stosowana w niektórych dystrybucjach LiveCD. Wpis w Wikipedii aufs wymienia kilka.
fstab
, że punktem montowania jest/
? (tzn. system uruchamia się po odrzuceniu obrazu)./
, uważam, że lepiej jest zacząć od initrd (tak sądzę w przypadku filmów na żywo). Być może możesz to zrobić ze skryptu inicjującego, choć brzmi to skomplikowanie.Aktualizacja:
Wygląda na to, że istnieją 2 inne prostsze sposoby, aby to zrobić na Ubuntu (przynajmniej w późniejszych wersjach):
sudo apt-get install overlayroot
a następnie przez ustawienieoverlayroot="tmpfs:swap=1,recurse=0"
w/etc/overlayroot.local.conf
.sudo apt-get install fsprotect
następnie przekazanyfsprotect
jako parametr jądraW końcu wymyśliłem, jak to zrobić z głównym systemem plików (w Ubuntu 11.04)!
Kroki umożliwiające uruchomienie systemu są proste. Użyłem tego przewodnika w połączeniu z tym przewodnikiem i kilkoma wyszukiwaniami w sieci, aby dowiedzieć się, jak zapewnić jego prawidłowe działanie, bez błędów.
Podsumowanie:
Biegać:
Zapisz to do
/etc/initramfs-tools/scripts/init-bottom/__rootaufs
. Nie sądzę, że nazwa ma znaczenie, ale początek__
można wykorzystać do celów zamawiania, więc jeśli zmienisz nazwę, możesz zachować podkreślenia. (To jest kopia tego pliku .)W
/etc/default/grub
znajdź wiersz, który zaczyna się odGRUB_CMDLINE_LINUX_DEFAULT
, a następnie w cudzysłowach dodaj parametraufs=tmpfs
.Premia: Jeśli chcesz tymczasowo wyłączyć przekierowanie, po prostu usuń ten argument z listy parametrów jądra. Prawdopodobnie możesz to zrobić, przytrzymując klawisz Shift podczas uruchamiania systemu, aby wyświetlić menu GRUB; następnie naciśnij e, aby edytować parametry i po prostu usuń
aufs=...
parametr z listy.Dołącz te linie do
/etc/sysctl.conf
. ( Ostrzeżenie : potencjalne zagrożenie bezpieczeństwa.)Uruchom następujące linie:
Jeśli wszystko poszło dobrze, po ponownym uruchomieniu uruchomisz to w tymczasowym systemie plików. Część RAM będzie w
/rw
, a obraz dysku będzie w/ro
, ale oczywiście będzie tylko do odczytu.Niemniej jednak, jeśli uruchomiłeś system tymczasowy, ale chcesz wprowadzić trwałą zmianę, możesz ponownie zainstalować
/ro
system plików, mówiąc:aby był zapisywalny, a następnie możesz wprowadzić wszelkie modyfikacje potrzebne w tym katalogu.
źródło
Tak, przez unionfs , patrz unionfs.filesystems.org . Zamontowałeś pierwszy system plików tylko do odczytu, a jako drugi system plików RAM do odczytu i zapisu przez unionfs.
W Ubuntu możesz znaleźć pakiet unionfs-fuse, który jest kolejną implementacją tych samych rzeczy, ale w przestrzeni użytkownika, a nie jako moduł jądra.
źródło
Możesz to również zrobić na poziomie urządzenia, bez unii takich jak aufs. Zobacz mapowanie urządzeń
snapshot-origin
.źródło