Можно ли смонтировать петлевой файл только для чтения и перенаправить все записи в ОЗУ?
источник
Можно ли смонтировать петлевой файл только для чтения и перенаправить все записи в ОЗУ?
Это возможно, используя объединенный слой файловой системы, такой как 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. В википедии есть несколько записей .
fstab
, чтобы точка монтирования была/
? (то есть система загружается из сбрасываемого образа, в значительной степени.)/
, я полагаю, вам лучше с initrd (это то, как это делается для livecds, я считаю). Вы можете сделать это из сценария инициализации, хотя это звучит сложно.Обновить:
Кажется, есть 2 других более простых способа сделать это в Ubuntu (по крайней мере, в более поздних версиях):
sudo apt-get install overlayroot
а затем, установивoverlayroot="tmpfs:swap=1,recurse=0"
в/etc/overlayroot.local.conf
.sudo apt-get install fsprotect
с последующей передачейfsprotect
в качестве параметра ядраЯ наконец понял, как это сделать с корневой файловой системой (в Ubuntu 11.04)!
Шаги по загрузке системы просты. Я использовал это руководство в сочетании с этим руководством и кучей поисковых запросов в Интернете, чтобы выяснить, как заставить его работать правильно, без ошибок.
Резюме:
Бег:
Сохраните это
/etc/initramfs-tools/scripts/init-bottom/__rootaufs
. Я не думаю, что имя на самом деле имеет значение, но начало__
может быть использовано для упорядочивания, поэтому, если вы измените имя, вы можете захотеть сохранить подчеркивание. (Это копия этого файла .)В
/etc/default/grub
, найдите строку, которая начинается сGRUB_CMDLINE_LINUX_DEFAULT
, и в следующих кавычках добавьте параметрaufs=tmpfs
.Бонус: если вам нужно временно отключить перенаправление, просто удалите этот аргумент из списка параметров ядра. Вероятно, вы можете сделать это, удерживая клавишу Shift во время загрузки системы, чтобы показать меню GRUB; затем нажмите e, чтобы изменить параметры, и просто удалите
aufs=...
параметр из списка.Добавьте эти строки в
/etc/sysctl.conf
. ( Предупреждение : потенциальная угроза безопасности.)Запустите эти строки:
Если все прошло хорошо, при перезагрузке вы будете делать это во временную файловую систему. Часть ОЗУ будет в
/rw
, и образ диска будет в/ro
, но, конечно, это будет только для чтения.Тем не менее, если вы загрузились во временную систему, но хотите внести постоянные изменения, вы можете заново смонтировать
/ro
файловую систему, сказавчтобы сделать его доступным для записи, а затем вы можете внести любые изменения, необходимые для этого каталога.
источник
Да, от unionfs, см. Unionfs.filesystems.org . Вы монтируете первую файловую систему только для чтения и в качестве второй файловой системы ОЗУ для чтения и записи через unionfs.
В Ubuntu вы можете найти пакет unionfs-fuse, который является другой реализацией тех же вещей, но в пространстве пользователя, а не в качестве модуля ядра.
источник
Вы также можете сделать это на уровне устройства, без unionfs, как aufs. Смотрите устройство-картограф
snapshot-origin
.источник