6

Эта проблема

У меня есть флэш-накопитель USB, на котором, помимо Windows PE и других, установлена система Ubuntu 11.04 в виртуальном (файловом) разделе:

<drive>/ubuntu/disks/boot.disk      mount point /boot  (contains GRUB)
<drive>/ubuntu/disks/root.disk      mount point /      (contains rest of system)

Работает нормально ...

Тем не менее, все изменения сохраняются после выключения.

Я также хотел бы получить дополнительную опцию в меню GRUB2, которая будет загружать ту же установку, но которая перенаправит все записи из корневой файловой системы в ОЗУ, следовательно, отменит все изменения, внесенные в корневую файловую систему (root.disk).

Подчеркнем: еще должна быть опция для нормальной загрузки системы.

(Конечно, изменения в других файловых системах не должны перенаправляться - только корневые и загрузочные диски должны оставаться неизменными с этой опцией.)

Что я уже сделал

Мой /etc /fstab в настоящее время выглядит так:

# <file system>              <mount point> <type> <options>              <dump> <pass>
proc                         /proc         proc   nodev,noexec,nosuid    0      0
/host/ubuntu/disks/root.disk /             ext2   loop,errors=remount-ro 0      0
/host/ubuntu/disks/boot.disk /boot         ext2   loop,errors=remount-ro 0      0

И мой grub.cfg выглядит так:

menuentry "Ubuntu, Linux 2.6.38-13-generic" {
    insmod part_msdos
    insmod ntfs
    set root='(/dev/sdb,msdos1)'
    search --no-floppy --fs-uuid --set=root MY_DRIVE_UUID
    loopback loop0 /ubuntu/disks/root.disk
    set root=(loop0)
    linux /boot/vmlinuz-2.6.38-13-generic root=UUID=MY_DRIVE_UUID loop=/ubuntu/disks/root.disk ro   acpi_sleep=nonvs acpi_osi=Linux acpi_backlight=vendor
    initrd /boot/initrd.img-2.6.38-13-generic
}

Я уже пытался изменить свой fstab, например:

# <file system>              <mount point> <type> <options>              <dump> <pass>
proc                         /proc         proc   nodev,noexec,nosuid    0      0
/host/ubuntu/disks/root.disk /rootdisk     ext2   loop,errors=remount-ro 0      0
tmpfs                        /ramdisk      tmpfs  defaults               0      0
none                         /             aufs   br:/rootdisk=ro:/ramdisk=rw 0 1
/host/ubuntu/disks/boot.disk /boot         ext2   loop,errors=remount-ro 0      0

По какой-то причине он не монтируется в / правильно (я пробовал все комбинации none , tmpfs , aufs , ordering, flags и т.д., О которых я мог подумать) и выдает ошибку при запуске.

Так... Как бы я занялся настройкой этого?

2 ответа2

7

Точно то, что вы просите, вероятно, не может быть сделано без пользовательской файловой системы, но есть ramfs (не ramdisk или tmpfs), который подходит близко. Ramfs иногда используется в качестве исходной файловой системы при загрузке (встроенного) Linux, то есть initramfs. Поскольку эта корневая файловая система находится в памяти, любые внесенные в нее изменения не распространяются обратно к ее источнику во флэш-памяти и теряются при завершении работы или следующей перезагрузке. Содержимое initramfs берется из файла архива initramfs.cpio, который прикреплен к двоичному файлу ядра.

Пользовательская файловая система, вероятно, потребуется для "перенаправления всех записей из корневой файловой системы в ОЗУ". Этот вид напоминает многоуровневую файловую систему, которую я помогал разработать: файловая система верхнего уровня была доступна пользователю и фактически состояла из двух отдельных файловых систем. Для доступа пользователя к файлу потребуется сначала найти файл в файловой системе A; если он не существует в A, то в файловой системе B должен был быть файл. (Файловая система A содержала обновленные файлы для файловой системы B без необходимости обновлять / заменять файловую систему B на носителе только для чтения.) Файловая система вашей мечты будет похожа: для доступа (т.е. открытия) файла потребуется сначала проверить, находится ли файл уже в ramfs. Если это так, то используйте эту копию; в противном случае скопируйте файл из корневой файловой системы диска в ramfs и затем используйте копию ramfs.

Возможно, вы могли бы настроить свою систему на загрузку, создать и смонтировать ramfs, скопировать rootfs в ramfs, а затем выполнить chroot в ramfs. Это поместит в память всю корневую файловую систему, а не только измененные файлы вашей файловой системы вашей мечты.

1

Ubuntu и большинство дистрибутивов, производных от Debian, используют "initramfs", который содержит драйверы и утилиты, необходимые во время загрузки перед монтированием корневого тома. Он загружается загрузчиком сразу после загрузки ядра (что также выполняется загрузчиком).

Обычно с initramfs обойтись после того, как над ним установлен настоящий корневой том. Я полагаю, что если вы отредактируете соответствующий скрипт /etc/init.d/ вы можете предотвратить это.

Чтобы это работало правильно, вам нужны ваши собственные пользовательские initramfs, в которых есть все файлы, необходимые для работы Linux. Эффект должен быть в конце процесса загрузки в том, что вы полностью запускаете initramfs. Некоторые live CD /ISO действительно делают то же самое.

Копирование, скажем, минимальной командной строки только для установки Ubuntu, в новый пользовательский initramfs не должно быть слишком сложным. Я не знаю каких-либо инструментов для автоматического "initramfs-ify" вашей текущей системы, но это действительно похоже на то, что кто-то делал раньше. Я обновлю этот ответ, если что-нибудь узнаю.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .