2008-01-07

Добавим места малышу Eee PC

Добавим места и скорости малышу Eee PC: сожмём /usr используя aufs и squashfs.

Для начала соберём и поставим aufs и squashfs.

Ставим нужные пакеты: sudo apt-get install aufs-modules aufs-tools squashfs-modules squashfs-tools.

Фиксим багу в сорцах squashfs. Для этого в начале распаковываем их:
$cd /usr/src
$sudo tar xjv squashfs.tar.bz2


Затем качаем патч. Я взял его отсюда.
Накладываем его:
$cd /usr/src/modules/squashfs/linux-2.6
$sudo patch inode.c 03-remove-slab.dpatch


Компиляем squashfs и aufs.
$sudo module-assistant -O build squashfs
$sudo module-assistant build aufs


Опция -O нужна для того что бы module-assistant не распаковывал сорцы squashfs затирая патч.
deb пакеты собираются в /usr/src. Ставим их и проверяем загрузку:
$sudo modprobe aufs
$sudo modprobe squashfs
$lsmod | egrep \(aufs\|squashfs\)


Теперь создадим и смонтируем образ /usr

Создаём сжатый образ /usr:
$sudo mksquashfs /usr /usr.sqfs -noappend -always-use-fragments


Монтируем его:
$sudo mkdir /usr-ro
$sudo mount -t squashfs -o loop /usr.sqfs /usr-ro


Монтируем всё вместе через aufs:
$sudo mkdir /usr-rw
$sudo mount -t aufs -o dirs=/usr-rw:/usr-ro=ro none /usr


В конечном итоге мы получаем наш родной /usr состоящий из двух частей:
1. RO часть лежащая в /usr-ro и являющаяся подмонтированным образом /usr.sqfs
2. RW часть содержащая изменения в RO части и лежащая в /usr-rw


Последнюю часть я пока ещё не сделал. Сжатие данных штука не быстрая. Кроме того, я не знаю как бы так аккуратнее подменить реальный /usr, что бы ничего не упало :).

В дальнейшем можно заново собирать usr.sqfs из /usr. Чистить /usr-rw. И работать со сжатой ФС.

Update


Сделал таки squashfs + aufs. Squashfs файл занимает ~40% (780Мб)от оригинального /usr (1.8Гб) - можно сказать 1 Гиг места. Пока что не удаляю оригинальный /usr, монтирую поверху. Потестирую потом снесу родной /usr.

Пока настраивал сделал косяк. Хотел сделать /usr-rw закрытым для юзерей (хез зачем;) ):
$sudo chmod a-rwx /usr-rw
$sudo chmod u+rwx /usr-rw


Настроил всё что надо в fstab, ребут и получаю окошко с квадратиками вместо GDM. Полез в консоль, глядь а /usr то dwrx------ :). Думаю: ага aufs юзает пермишены rw директории. Давай чепятать sudo chmod +rx /usr-rw. bash: chmod: command not found было мне ответом. Single mode полечил граблю.

Забавно что можно на лету mount/umount /usr без особых последствий.

По скорости видны земедления, по крайней мере при старте программ. Не критично, но есть. Чуть более долгая (3-4 сек) загрузка Гнома после логина. Так же чуть дольше (1-2) секунды стартует OO.

Ну и напоследок немного конфигов и статистики:

$cat /etc/fstab
# /etc/fstab: static file system information.
#
# <file system=""> <mount point=""> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
# /dev/sda1
UUID=4020dd57-e983-46bc-8890-b62a44605da8 / reiserfs notail,noatime 0 1
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto,exec 0 0
tmpfs /var/log tmpfs defaults,noatime 0 0
#tmpfs /var/cache/apt/archives tmpfs defaults,noatime 0 0
/usr.sqfs /usr-ro squashfs ro,defaults,loop 0 0
usr-aufs /usr aufs dirs=/usr-rw:/usr-ro=ro 0 0

$cat /etc/mtab
/dev/sda1 / reiserfs rw,noatime,notail 0 0
proc /proc proc rw,noexec,nosuid,nodev 0 0
/sys /sys sysfs rw,noexec,nosuid,nodev 0 0
varrun /var/run tmpfs rw,noexec,nosuid,nodev,mode=0755 0 0
varlock /var/lock tmpfs rw,noexec,nosuid,nodev,mode=1777 0 0
udev /dev tmpfs rw,mode=0755 0 0
devshm /dev/shm tmpfs rw 0 0
devpts /dev/pts devpts rw,gid=5,mode=620 0 0
lrm /lib/modules/2.6.22-14-generic/volatile tmpfs rw 0 0
tmpfs /var/log tmpfs rw,noatime 0 0
/usr.sqfs /usr-ro squashfs ro,loop=/dev/loop0 0 0
usr-aufs /usr aufs rw,dirs=/usr-rw:/usr-ro=ro 0 0
securityfs /sys/kernel/security securityfs rw 0 0
binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc rw,noexec,nosuid,nodev 0 0
/dev/sdb1 /media/disk-1 vfat rw,nosuid,nodev,shortname=mixed,uid=1000,utf8,umask=077,usefree 0 0


$df | grep usr-ro; du /usr-ro | tail -n 1
/usr.sqfs 767744 767744 0 100% /usr-ro
1834825 /usr-ro

3 комментария:

  1. Смени стиль для команд, нечитаемо почти :(

    ОтветитьУдалить
  2. Обязательно. Хотел как то выделить консольку, пока вышло вот так.

    ОтветитьУдалить
  3. Во, намутил стиль для консоли. Надеюсь так читабельней.

    ОтветитьУдалить