Przyjmijmy, że mamy serwer, którego z różnych względów nie powinniśmy wyłączać. Nawet na kilka minut. Jednocześnie na serwerze kończy nam się miejsce na ważnej partycji (w tym przypadku jest to home). Mamy jednak trochę wolnego miejsca na innych partycjach. No i mamy LVM-a.
Rozwiązanie jest proste: "przesuniemy" trochę wolnej przestrzeni z innej partycji :).
Na początek musimy zorganizować taką wolną przestrzeń.
serwer:/# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vgraid1-root 4.0G 423M 3.4G 12% /
tmpfs 4.4G 0 4.4G 0% /lib/init/rw
udev 10M 56K 10M 1% /dev
tmpfs 4.4G 0 4.4G 0% /dev/shm
/dev/sda1 183M 19M 155M 11% /boot
/dev/mapper/vgraid1-home 16G 2.6G 13G 18% /home
/dev/mapper/vgraid1-usr 16G 624M 15G 5% /usr
/dev/mapper/vgraid1-var 15.0G 235M 14.6G 2% /var
Jak widać na /var mamy sporo wolnego marnującego się miejsca i je właśnie wykorzystamy. Modyfikować możemy wyłącznie partycje, które nie są zamontowane. Odmontujemy zatem /var !
serwer:/# umount /var
umount: /var: device is busy
umount: /var: device is busy
Nie da się :( - mogliśmy się tego spodziewać - partycja jest używana. Musimy zadbać by nie była.
serwer:/# lsof |grep /var
acpid 12208 root 1w REG 254,4 159 626 /var/log/acpid
acpid 12208 root 2w REG 254,4 159 626 /var/log/acpid
cron 12224 root cwd DIR 254,4 4096 676 /var/spool/cron
cron 12224 root 3u REG 254,4 6 701 /var/run/crond.pid
syslogd 12241 root 1w REG 254,4 126215 194 /var/log/auth.log
syslogd 12241 root 2w REG 254,4 30750 160 /var/log/syslog
syslogd 12241 root 3w REG 254,4 4590 190 /var/log/daemon.log
syslogd 12241 root 4w REG 254,4 0 195 /var/log/kern.log
syslogd 12241 root 5w REG 254,4 0 1217 /var/log/lpr.log
syslogd 12241 root 6w REG 254,4 0 1218 /var/log/mail.log
syslogd 12241 root 7w REG 254,4 0 189 /var/log/user.log
syslogd 12241 root 8w REG 254,4 0 1220 /var/log/uucp.log
syslogd 12241 root 9w REG 254,4 0 1221 /var/log/mail.info
syslogd 12241 root 10w REG 254,4 0 1222 /var/log/mail.warn
syslogd 12241 root 11w REG 254,4 0 1223 /var/log/mail.err
syslogd 12241 root 12w REG 254,4 0 1224 /var/log/news/news.crit
syslogd 12241 root 13w REG 254,4 0 1225 /var/log/news/news.err
syslogd 12241 root 14w REG 54,4 0 1226 /var/log/news/news.notice
syslogd 12241 root 15w REG 254,4 0 405 /var/log/debug
syslogd 12241 root 16w REG 254,4 3525 191 /var/log/messages
ntpd 12255 ntpd cwd DIR 254,4 4096 713 /var/run/openntpd
ntpd 12255 ntpd rtd DIR 254,4 4096 713 /var/run/openntpd
Ok! żaden z programów nie wydaje się skrajnie ważny. System bez nich przez chwilę sobie poradzi. Zatem do dzieła. Wyłączamy usługi używające partycję /var.
serwer:/# lsof |grep /var
serwer:/# /etc/init.d/acpid stop
serwer:/# /etc/init.d/cron stop
serwer:/# /etc/init.d/sysklogd stop
serwer:/# /etc/init.d/openntpd stop
sprawdzamy czy jeszcze coś nie zostało
serwer:/# lsof |grep /var |wc -l
0
To jest TEN MOMENT kiedy należy zrobić backup danych z partycji, którą zamierzamy modyfikować. Ja zrobiłem to tak
serwer:/# tar cvvf var_backup.tar /var
Ok. Teraz możemy odmontować /var
serwer:/# umount /var
Sukces!
Teraz powinniśmy sprawdzić poprawność partycji:
serwer:/# e2fsck -f /dev/mapper/vgraid1-var
e2fsck 1.40-WIP (14-Nov-2006)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/mapper/vgraid1-var: 1419/1831424 files (4.2% non-contiguous), 119616/3670016 blocks
Teraz zmienimy rozmiar partycji /dev/mapper/vgraid1-var. Najpierw musimy zmienić jej rozmiar na mniejszy niż jej rozmiar docelowy. W naszym przypadku rozmiar docelowy to 5G zatem zmniejszymy sobie rozmiar systemu plików do 3G.
serwer:/# resize2fs -p /dev/mapper/vgraid1-var 3G
resize2fs 1.40-WIP (14-Nov-2006)
Resizing the filesystem on /dev/mapper/vgraid1-var to 786432 (4k) blocks.
Begin pass 2 (max = 4448)
Relocating blocks XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Begin pass 3 (max = 112)
Scanning inode table XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Begin pass 4 (max = 106)
Updating inode references XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/mapper/vgraid1-var is now 786432 blocks long.
teraz zmniejszymy sobie partycję LVM:
serwer:/# lvreduce --size 5G /dev/vgraid1/var
WARNING: Reducing active logical volume to 5.00 GB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce var? [y/n]: y
Reducing logical volume var to 5.00 GB
Logical volume var successfully resized
a następnie ponownie uruchomimy resize2fs, ale teraz bez podawania rozmiaru systemu plików. Wówczas zostanie on ustawiony na maksymalny możliwy na danym urządzeniu
serwer:/# resize2fs -p /dev/mapper/vgraid1-var
resize2fs 1.40-WIP (14-Nov-2006)
Resizing the filesystem on /dev/mapper/vgraid1-var to 1310720 (4k) blocks.
Begin pass 1 (max = 16)
Extending the inode table XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/mapper/vgraid1-var is now 1310720 blocks long.
I tyle. Pozostaje nam jeszcze ponownie zamontować partycję i uruchomić wcześniej zatrzymane usługi
serwer:/# mount /var
serwer:/# /etc/init.d/acpid start
serwer:/# /etc/init.d/cron start
serwer:/# /etc/init.d/sysklogd start
serwer:/# /etc/init.d/openntpd start
dzięki tej operacji mamy 10G nieprzydzielone do żadnej partycji. Wykonaliśmy już 50% zadania.
Teraz czas na zwiększenie partycji /home.
Podobnie jak poprzednio musimy zrobić backup a następnie odmontować partycję, którą będziemy modyfikować.
serwer:/# tar cvvf home.tar /home
serwer:/# umount /home
Teraz zmieniamy rozmiar partycji przydzielając jej zaoszczędzone wcześniej 10G
serwer:/# lvextend -L+9G /dev/vgraid1/home
Wykonujemy sprawdzenie systemu plików oraz resize:
serwer:/# e2fsck -f /dev/mapper/vgraid1-home
e2fsck 1.40-WIP (14-Nov-2006)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/mapper/vgraid1-home: 272/2097152 files (26.8% non-contiguous), 226212/4194304 blocks
oraz resize:
serwer:/# resize2fs /dev/mapper/vgraid1-home
I ponownie montujemy partycję:
serwer:/# mount /home
I tyle! Cieszymy się nowo uzyskanym wolnym miejscem na partycji home.