Что нужно, если мы хотим изменить имеющийся раздел, отформатированный в ext3? Ну, во-первых — желание, во-вторых — время, в-третьих — live-cd/dvd с любым Linux.
Для начала, загрузимся в уже имеющуюся систему, на всякий, можно сделать резервную копию самых важных данных. Поднимем привилегии до root.
su -
Все дальнейшие команды мы будем выполнять от «рута». Вот как выглядит список разделов до манипуляций:
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 9.5G 4.1G 4.9G 46% /
varrun 94M 132K 94M 1% /var/run
varlock 94M 0 94M 0% /var/lock
udev 10M 52K 10M 1% /dev
devshm 94M 0 94M 0% /dev/shm
lrm 94M 18M 77M 19% /lib/modules/2.6.17-10-generic/volatile
Раздел, с которым мы будем работать (/dev/sda1) должен быть отмонтирован, поэтому в случае, если это один из системосодержащих разделов, нам потребуется live-cd со следующими интсрументами: fdisk, umount, fsck, tune2fs, e2fsck, resize2fs.
Приступим: В данном примере мы будем уменьшать раздел /dev/sda1, хотя подобным образом его можно и увеличить. Соберем некоторую статистическую информацию о нашем разделе.
df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 9859036 4234908 5123304 46% /
varrun 95480 132 95348 1% /var/run
varlock 95480 0 95480 0% /var/lock
udev 10240 52 10188 1% /dev
devshm 95480 0 95480 0% /dev/shm
lrm 95480 17580 77900 19% /lib/modules/2.6.17-10-generic/volatile
df -B 4k
Filesystem 4K-blocks Used Available Use% Mounted on
/dev/sda1 2464759 1058727 1280826 46% /
varrun 23870 33 23837 1% /var/run
varlock 23870 0 23870 0% /var/lock
udev 2560 13 2547 1% /dev
devshm 23870 0 23870 0% /dev/shm
lrm 23870 4395 19475 19% /lib/modules/2.6.17-10-generic/volatile
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 9.5G 4.1G 4.9G 46% /
varrun 94M 132K 94M 1% /var/run
varlock 94M 0 94M 0% /var/lock
udev 10M 52K 10M 1% /dev
devshm 94M 0 94M 0% /dev/shm
lrm 94M 18M 77M 19% /lib/modules/2.6.17-10-generic/volatile
fdisk -l
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 1247 10016496 83 Linux
/dev/sda2 1248 1305 465885 5 Extended
/dev/sda5 1248 1305 465853+ 82 Linux swap / Solaris
fdisk -s /dev/sda1
10016496
Перезагрузимся в live-cd и зайдем там под «рутом». Отмонтируем наш раздел, если он оказался смонтированным.
umount /dev/sda1
Проверим его:
fsck -n /dev/sda1
Опция -n позволяет делать проверку без автоисправления найденных ошибок, вместо исправления проверка выведет ошибки на stdout.
Если вывод команды выглядит подобным образом,
fsck 1.38 (30-Jun-2005)
e2fsck 1.38 (30-Jun-2005)
/dev/sda1: clean, 159037/1254176 files, 1095299/2504124 blocks
то все нормально, в противном случае, сделайте проверку без опции -n, а даже лучше с опцией -a.
Отключим журналирование, превратив наш раздел в ext2.
tune2fs -O ^has_journal /dev/sda1
Теперь выполним еще олну проверку. В зависимости от размера раздела, она может занять значительное время, например на разделе в 200ГБ она занимает минут 10-25.
e2fsck -f /dev/sda1
e2fsck 1.38 (30-Jun-2005)
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/sda1: 164178/1254176 files (0.6% non-contiguous), 1051617/2504124 blocks
На данном этапе мы уменьшим размер раздела. Т.к. resize2fs не поддерживает уменьшение раздела ext3, то мы его преобразовали в ext2. Исходя из df, у нас было использовано около 4ГБ, поэтому уменьшим раздел /dev/sda1 до 6ГБ, чтоб осталось еще свободное место.
resize2fs /dev/sda1 6000M
resize2fs 1.38 (30-Jun-2005)
Resizing the filesystem on /dev/sda1 to 1536000 (4k) blocks.
The filesystem on /dev/sda1 is now 1536000 blocks long.
Пожалуйста обратите внимание на кол-во блоков — 1536000 и их размер — 4k. Эти цифры нам потом пригодятся.
Теперь мы удалим /dev/sda1, не бойтесь, данные останутся нетронутыми. Для удаления воспользуемся утилитой fdisk.
fdisk /dev/sda
#Да, /dev/sda, а не /dev/sda1
The number of cylinders for this disk is set to 1305.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
#Наберем, m, чтобы увидеть список возможных команд:
Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partitions system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
Удалим раздел номер 1 (/dev/sda1). Если у вас есть список из разделов наподобие (/dev/sda1, /dev/sda2, /dev/sda5, /dev/sda10), то номер соответствует номеру раздела, не смущайтесь тому, что пропущен порядок, номер /dev/sda10 в данном примере равен 10.
Command (m for help): d
Partition number (1-5): 1
Воссоздадим только что удаленный раздел, но уже с другим рамером. Если номер раздела был от 1го до 5ти, то это был первичный раздел, если номер выше 5ти, то это логический раздел. У нас был первичный, поэтому логически будет выбрать опцию p для его создания и номер 1:
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
p
Partition number (1-4): 1
Вот нам и понадобилась та информация, которую надо было запомнить ранее, чтоб подсчитать номер поледнего цилиндра для новосозданного уменьшенного раздела.
Чтоб получить необходимое значение, мы умножаем кол-во блоков, число,
полученное при выводе resize2fs на кол-во размера блока и на 3% для
предосторожности.
Last cylinder or +size or +sizeM or +sizeK (1-1247, default 1247): +6328320K
Наш подопытный раздел имел загрузочный флаг, поэтому зададим и его:
Command (m for help): a
Partition number (1-5): 1
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
Мы записали изменения в таблицу разделов, но чтоб они вступили в силу, нужна перезагрузка, загрузимся опять в live-cd.
reboot
Отмонтируем /dev/sda1 и проверим, чтоб все было нормально:
umount /dev/sda1
umount: /dev/sda1: not mounted
fsck -n /dev/sda1
fsck 1.38 (30-Jun-2005)
e2fsck 1.38 (30-Jun-2005)
/dev/sda1: clean, 159036/765536 files, 1047239/1536000 blocks
Всё прошло без ошибок, как и должно быть. Активируем журналирование и перезагрузимся:
tune2fs -j /dev/sda1
tune2fs 1.38 (30-Jun-2005)
Creating journal inode: done
This filesystem will be automatically checked every 30 mounts or
0 days, whichever comes first. Use tune2fs -c or -i to override.
reboot
В загруженной системе выполним последние проверки и убедимся, что никакие данные не потерялись:
df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 6047868 4224140 1639408 73% /
varrun 95480 132 95348 1% /var/run
varlock 95480 0 95480 0% /var/lock
udev 10240 52 10188 1% /dev
devshm 95480 0 95480 0% /dev/shm
lrm 95480 17580 77900 19% /lib/modules/2.6.17-10-generic/volatile
df -B 4k
Filesystem 4K-blocks Used Available Use% Mounted on
/dev/sda1 1511967 1056035 409852 73% /
varrun 23870 33 23837 1% /var/run
varlock 23870 0 23870 0% /var/lock
udev 2560 13 2547 1% /dev
devshm 23870 0 23870 0% /dev/shm
lrm 23870 4395 19475 19% /lib/modules/2.6.17-10-generic/volatile
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 5.8G 4.1G 1.6G 73% /
varrun 94M 132K 94M 1% /var/run
varlock 94M 0 94M 0% /var/lock
udev 10M 52K 10M 1% /dev
devshm 94M 0 94M 0% /dev/shm
lrm 94M 18M 77M 19% /lib/modules/2.6.17-10-generic/volatile
fdisk -l
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 789 6337611 83 Linux
/dev/sda2 1248 1305 465885 5 Extended
/dev/sda5 1248 1305 465853+ 82 Linux swap / Solaris
fdisk -s /dev/sda1
6337611
По материалам: http://www.howtoforge.com/linux_resizing_ext3_partitions