Думаю, что ни для кого не секрет, что флеш-накопители имеет ограниченный ресурс перезаписей, поэтому, хотелось бы опубликовать небольшой мануал по оптимизации работы ОС, используя флешку только для чтения и записывать данные только один раз при завершении работы.
Дело в том, что мой вариант оптимизации был разработан и проверен на Russian Fedora Remix 15, поэтому я с радостью приму все пожелания и исправления, для создания 100% решения для всех дистрибутивов.
Первое, что нам необходимо сделать — это создать разделы на флешке, для возможности использования ее в Windows. Если этого не планируется, то этот шаг можно пропустить. Так как мной был использован накопитель, объемом 16 Гб, я решил создать общий раздел объемом в 10 Гб FAT32 и все остальное раздел для Linux Ext2, причем файловая система Ext2 выбрана тоже не с проста — ее преимуществом для использования на флешке является то, что она не является журналируемой.
Возможно, кто-то сделает замечание, что выносить этот шаг в отдельный пункт не требуется, но существует некоторая проблема, из-за которой установщик Fedora (наверное, только Fedora) делает корневой раздел первым, а это означает, что Windows не увидит раздела, который будет предназначен для нее.
Второй шаг — это установка дистрибутива. При установке дистрибутива ничего особенного нам не требуется, главное что нужно сделать — это выбрать созданный нами раздел Ext2 на флешке для монтирования его в корень и указать, что GRUB должен быть установлен на флешку (у меня это /dev/sdb). Ну а дальше как обычно — выбираем нужные пакеты и устанавливаем. После установки мне пришлось подправить /boot/grub/grub.conf и /etc/fstab чтобы удалить записи про swap, добавляющиеся при установке системы на компьютере, на котором уже стоит Linux и установщик подключает их как swap для новой системы
Примерно так в fstab:
UUID=0b9cab29-b7e1-4da7-b7dc-3e59ccdd3c86 / ext4 defaults 1 1
#/dev/mapper/VolGroup-lv_swap swap swap defaults 0 0 #эту строку удаляем...
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0И примерно так в grub.conf:
kernel /boot/vmlinuz-2.6.38.6-27.fc15.x86_64 ro root=UUID=0b9cab29-b7e1-4da7-b7dc-3e59ccdd3c86 rd_LVM_LV=VolGroup/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM LANG=ru_RU.UTF-8 KEYTABLE=ru rhgb quietудалил строку rd_LVM_LV=VolGroup/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM
Здесь хотелось бы пояснить, что в GRUB и fstab необходимо прописывать не адреса устройств (типа /dev/sdb1), а через их UUID (root=UUID=0b9cab29-b7e1-4da7-b7dc-3e59ccdd3c86), чтобы система не была привязана к конкретным адресам устройств, если на компьютере на котором запускается флешка не установлено или установлено несколько жестких дисков. Установщик Fedora делает это сам.
В результате мы получили систему, которая успешно грузится на всех компьютерах, осталась лишь проблема с оптимизацией.
Теперь настраиваем системные сервисы и, если необходимо, обновляем ПО установленное с диска и можем смело перейти к следующему шагу — подключение корня в reanonly.
Для этого:
sudo rm -fr /etc/resolv.conf
touch /tmp/resolv.conf
ln -s /tmp/resolv.conf /etc/resolv.confЭто нам нужно для того, чтобы NetworkManager мог прописывать DNS-сервера.
Уничтожаем /etc/resolv.conf
Создаем /tmp/resolv.conf
Создаем ссылку с /etc/resolv.conf на /tmp/resolv.conf
Переименовываем /sbin/shutdown в /sbin/shutdown2:
mv /sbin/shutdown /sbin/shutdown2Создаем новый /sbin/shutdown
#!/bin/bash
tar -jcf /tmp/home.tar.bz2 /home
mount / -o remount,rw
mv -f /tmp/home.tar.bz2 /
mount / -o remount,ro
/sbin/shutdown2 $@и не забыть chmod +x /sbin/shutdown
Этот скрипт архивирует /home, помещая ее в /tmp, затем перемонтирует корень в режим для записи, перемещает /tmp/home.tar.bz2 в /home.tar.bz2 и монтирует флешку в режим только для записи
Это нужно для того, чтобы данные из /home у нас не терялись
В файл /etc/rc.d/rc.local добавляем:
tar -jxf /home.tar.bz2 -C /
touch /tmp/resolv.confЭтот шаг распакует архив /home.tar.bz2 в /home, которая у нас будет примонтирована как tmpfs
И создаст /tmp/resolv.conf на который будет ссылаться /etc/resolv.conf
Ну и последний момент — правка fstab для монтирования корня в readonly и изменяемых разделов в tmpfs:
не забываем поменять 0b9cab29-b7e1-4da7-b7dc-3e59ccdd3c86 на UUID Вашего раздела
меняем
UUID=0b9cab29-b7e1-4da7-b7dc-3e59ccdd3c86 / ext4 defaults 1 1
на
UUID=0b9cab29-b7e1-4da7-b7dc-3e59ccdd3c86 / ext4 defaults,ro 1 1
#ram disks
tmpfs /home tmpfs defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
tmpfs /var/tmp tmpfs defaults 0 0
tmpfs /var/log tmpfs defaults 0 0
tmpfs /var/db tmpfs defaults 0 0
tmpfs /var/run tmpfs defaults 0 0
tmpfs /var/lock tmpfs defaults 0 0в результате:
корень в readonly
/home /tmp /var/tmp /var/log и /var/db примонтированы как tmpfs, то есть они хранятся в ОЗУ и при завершении работы они очищаются
На этом все. Мы имеем систему, которая запускается с флешки на всех компьютерах и не тратит ресурс флешки попусту
