Настройка Linux для работы на бюджетном SSD

На моём домашнем сервере поселился самосборный SSD-диск, основанный на карте Compact Flash. Про то, как его собрать можно почитать в прошлом логе под названием Бюджетный SSD. А как я оптимизировал Debian Lenny и переносил систему на этот самосбор я напишу здесь…

<html> <span style=«color:red;font-size:150%;»>Внимание! Ниже приводятся инструкции, которые при необдуманном использовании могут уничтожить все ваши данные. Будьте осторожны!</span> </html>

Что имеем:

Чего хотим: переместить Linux с жёсткого диска на бюджетный SSD.

Как делаем:

echo 0,,,* | sudo sfdisk /dev/sdb -O cf-ssd-sfdisk.backup
sudo mkfs.ext3 -L ROOT /dev/sdb1
sudo aptitude install rsync
for i in /etc/init.d/{apache2,bind9,cron,dnsmasq,exim4,hostapd,nut}; do sudo $i stop; done;
sudo mkdir /mnt/ssd && sudo mount /dev/sdb1 /mnt/ssd
sudo rsync -ax / /mnt/ssd/
echo "(hd0) /dev/sdb" | sudo tee /mnt/ssd/boot/grub/device.map
sudo grub-install --root-directory=/mnt/ssd --no-floppy /dev/sdb
echo "(hd0) /dev/sda" | sudo tee /mnt/ssd/boot/grub/device.map
/mnt/ssd/boot/grub/menu.lst
...
# kopt=root=LABEL=ROOT rootflags=data=writeback ro
...
kernel          /boot/vmlinuz-2.6.32-bpo.5-486 root=LABEL=ROOT rootflags=data=writeback ro
...
/boot/grub/menu.lst
default		saved
timeout		5
 
title           Debian GNU/Linux, kernel 2.6.32-bpo.5-486
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.32-bpo.5-486 root=UUID=ca08484c-1fe1-4bc0-80cc-19940214b601 ro
initrd          /boot/initrd.img-2.6.32-bpo.5-486
savedefault
 
title           Debian GNU/Linux, kernel 2.6.32-bpo.5-486
root            (hd1,0)
kernel          /boot/vmlinuz-2.6.32-bpo.5-486 root=LABEL=ROOT rootflags=data=writeback ro
initrd          /boot/initrd.img-2.6.32-bpo.5-486
savedefault     0
sudo grub-set-default 1
/mnt/ssd/etc/sysctl.d/panic.conf
kernel.panic = 60
# configure settings in /proc/sys/vm/*
# агрессивность использования swap
vm.swappiness = 0
# как часто ядро должно находить незаписанные в ФС данные и писать их
vm.dirty_writeback_centisecs = 6000
# сколько времени должно пройти, чтобы ядро посчитало незаписанные в ФС данные достаточно устаревшими для их записи
vm.dirty_expire_centisecs = 6000
# сколько процентов памяти могут занимать незаписанные в ФС данные
vm.dirty_ratio = 80
# если незаписанные данные занимают меньше памяти в процентах, то их можно не записывать сейчас
vm.dirty_background_ratio = 20

Внимание! БОльшая часть этих настроек увеличивает использование памяти. Что, в свою очередь, увеличивает риск её полного заполнения, что может вызвать принудительное закрытие программ ядром. Такое может случиться даже при наличии свободной памяти, но если ядру вдруг понадобится зарезервировать большую непрерывную область памяти, а доступны будут только фрагментированные участки. Рекомендую внимательно следить за использованием памяти и подстраивать настройки под своё оборудование 3) 4)

/mnt/ssd/etc/fstab
...
LABEL=ROOT / ext3 noatime,nodiratime,data=writeback,commit=50,rw,suid,dev,exec,auto,nouser,async,errors=remount-ro 0 1
sudo umount /mnt/ssd
sudo aptitude remove mlocate

Подробнее про оборудование и другие настройки моего домашнего сервера - в следующих логах.

~~DISCUSSION~~