1 (30.09.2011 17:11:31 отредактировано r0ck3r)

Думаю, что ни для кого не секрет, что флеш-накопители имеет ограниченный ресурс перезаписей, поэтому, хотелось бы опубликовать небольшой мануал по оптимизации работы ОС, используя флешку только для чтения и записывать данные только один раз при завершении работы.
Дело в том, что мой вариант оптимизации был разработан и проверен на 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, то есть они хранятся в ОЗУ и при завершении работы они очищаются

На этом все. Мы имеем систему, которая запускается с флешки на всех компьютерах и не тратит ресурс флешки попусту

2

r0ck3r, на будущее - есть кнопка "Изменить"
прикреплять не буду, ибо описываете элементарные вещи и костыли, которые лучше не повторять...

95% процентов проблем находятся между клавиатурой и стулом.

3

Fat-Zer пишет:

r0ck3r, на будущее - есть кнопка "Изменить"
прикреплять не буду, ибо описываете элементарные вещи и костыли, которые лучше не повторять...

да, просто не знаю почему второй раз нажал ответить...а потом ушел...
ну вообще этот мануал был сделан для того чтобы его доработать так, чтобы он перестал быть костылем, а рабочим вариантом для любого дистрибутива...

4

Не в тот раздел тогда, если нормальный мануал, то наверное можно в http://linuxforum.ru/viewforum.php?id=14 - там прикрепить его, ну и доработать так чтобы всем понятно/доступно было.

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

5

я чего-то и забыл про тот раздел... сейчас перекину...

95% процентов проблем находятся между клавиатурой и стулом.

6

Fat-Zer, emlsch, посмотрел соседнюю тему, запинали бедного r0ck3r  :lol: ... идея то у него хорошая, пусть мануал нормальный напишет именно в разделе Live USB.

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

7

newzenon пишет:

Fat-Zer, emlsch, посмотрел соседнюю тему, запинали бедного r0ck3r  :lol: ... идея то у него хорошая, пусть мануал нормальный напишет именно в разделе Live USB.

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

8

r0ck3r, не вникал сильно, вроде нормально, кто-нибудь будет делать, вопросы возникнут, отрихтуешь.

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

9

из замечаний:

r0ck3r пишет:

Переименовываем /sbin/shutdown в /sbin/shutdown2

вместо этого уместносделать скрипт и повесить выключение средствами дистрибутива.

r0ck3r пишет:

tar -jcf /tmp/home.tar.bz2 /home

нафига тарить хоум? о_О

r0ck3r пишет:

/sbin/shutdown2 $1 $2 $3 $4 $5 $6 $7 $8 $9

это записывается man bash и посмотрите, что такое $@

+ раз / всё равно монтируете ro, то вместо порева с ресолвконф и гаданием, что выносить в tmpfs, надо использовать связку Aufs+tmpfs...
в TODO: сквош корня.

95% процентов проблем находятся между клавиатурой и стулом.

10

огог! спасибо большое) я мало что в этом понимаю, а тут все четко)))

11

Fat-Zer, про это:  ??

4. Usage
----------------------------------------
At first, make sure aufs-util are installed, and please read the aufs
manual, aufs.5 in aufs-util.git tree.
$ man -l aufs.5

And then,
$ mkdir /tmp/rw /tmp/aufs
# mount -t aufs -o br=/tmp/rw:${HOME} none /tmp/aufs

Here is another example. The result is equivalent.
# mount -t aufs -o br=/tmp/rw=rw:${HOME}=ro none /tmp/aufs
  Or
# mount -t aufs -o br:/tmp/rw none /tmp/aufs
# mount -o remount,append:${HOME} /tmp/aufs

Then, you can see whole tree of your home dir through /tmp/aufs. If
you modify a file under /tmp/aufs, the one on your home directory is
not affected, instead the same named file will be newly created under
/tmp/rw. And all of your modification to a file will be applied to
the one under /tmp/rw. This is called the file based Copy on Write
(COW) method.
Aufs mount options are described in aufs.5.
If you run chroot or something and make your aufs as a root directory,
then you need to customize the shutdown script. See the aufs manual in
detail.

Additionally, there are some sample usages of aufs which are a
diskless system with network booting, and LiveCD over NFS.
See sample dir in CVS tree on SourceForge.
История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

12

Fat-Zer пишет:

из замечаний:
вместо этого уместносделать скрипт и повесить выключение средствами дистрибутива.

насколько я понимаю этот метод не будет универсальным?

Fat-Zer пишет:

нафига тарить хоум? о_О

Чтобы сохранить права на файлы...можно было бы и cp, но тогда права не сохранятся и надо было бы /etc/rc.d/rc.local дописать chown -R user:user /home/user

Fat-Zer пишет:

это записывается man bash и посмотрите, что такое $@

Исправил)

Fat-Zer пишет:

+ раз / всё равно монтируете ro, то вместо порева с ресолвконф и гаданием, что выносить в tmpfs, надо использовать связку Aufs+tmpfs...
в TODO: сквош корня.

никогда Aufs не пользовался..расскажите поподробней как или где об этом почитать?
squashfs? если я не ошибаюсь она readonly by design и изменение настроек/сохранение данных не станет возможным?

13

newzenon, оно самое, правда в стандартном ядре(покрайнемерь в ванильном и гентушном его нет), точно есть в zen'е... про остальные - не знаю...

95% процентов проблем находятся между клавиатурой и стулом.

14

r0ck3r пишет:

насколько я понимаю этот метод не будет универсальным?

нет, но хотя бы сделайте ремарку, что правильно было бы не трогать шатдаун, а сделать скрипт...

r0ck3r пишет:

Чтобы сохранить права на файлы...можно было бы и cp, но тогда права не сохранятся и надо было бы /etc/rc.d/rc.local дописать chown -R user:user /home/user

я не заметил просто, что вы его восстанавливаете...

r0ck3r пишет:

никогда Aufs не пользовался..расскажите поподробней как или где об этом почитать?

я тоже пока не пользовался - руки никак до нетбука не доберутся... вики собственно страничка.

собственно в монтировании корня ro большого смысла нет... достаточно просто свести запись к минимуму + стандартные меры, типа таймаут на сброс грязных буферов побольше выставить... вы больше крови тасканиием /home туда-сюда себе и флешке попортит...
кстати ещё вы или не обмолвились или забыли... /var/run, /var/lock и /run(если есть) тоже в tmpfs загнать... а вот насчёт /var/db - это очень спорно...

r0ck3r пишет:

squashfs? если я не ошибаюсь она readonly by design и изменение настроек/сохранение данных не станет возможным?

да, но можно сделать финт ушами: смонтировать сквош, на него изменяемую статическую часть и на неё tmpfs... если надо подправить параметры, то убираем tmpfs и правим... ещё хорошо бы сделать скрипт, который будет сливать изменения в образ, но это уже фантазии...

95% процентов проблем находятся между клавиатурой и стулом.

15

насчет squashfs вместе с tmpfs немного недопонял, а насчет aufs - она не включена в моем дистрибутиве...думаю как и во многих...соответственно универсальность отпадает....
кстати, насчет /var/run и /var/lock - странно, но ОС работает и без этого....хотя добавить, конечно, необходимо...

16

r0ck3r пишет:

насчет squashfs вместе с tmpfs немного недопонял, а насчет aufs - она не включена в моем дистрибутиве...думаю как и во многих...соответственно универсальность отпадает....

Кто мешает поставить? Включить все равно надо. Тем более мы говорим об установке на флешку.

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

17 (21.10.2011 11:14:32 отредактировано zam)

полезная информация как использовать squashfs и aufs

http://optimization.hardlinux.ru/?page_id=997
http://forum.agilialinux.ru/viewtopic.php?pid=8748

так же можно и home и все остальное сжимать в squashfs и подключать в режим для изменений, плюс там пишут как все это дело потом обратно сжимать в модуль squashfs.

кстати вроде UnionFS включена в ядро, поэтому можно как вариант использовать ее вместо aufs. Но вроде пишут что UnionFS чем-то хуже aufs.