Кому полезно это руководство
Администраторы Linux и опытные пользователи, у которых есть отдельный ext3-раздел и свободное пространство непосредственно после него на диске. Не подходит, если свободное пространство находится в другом месте диска — в этом случае смотрите раздел «Альтернативные подходы».
Краткое содержание шагов
- Собираем исходную информацию о разделе и файловой системе.
- Загружаемся с Live-CD / rescue-системы (если раздел содержит корневую систему).
- Удаляем журнал (переключаем в ext2) — tune2fs -O ^has_journal.
- Удаляем и заново создаём первичный раздел с увеличенным размером через fdisk (важно сохранить начальный цилиндр).
- Перезагружаем для учета новой таблицы разделов.
- Проверяем и увеличиваем файловую систему с resize2fs.
- Воссоздаем журнал tune2fs -j и перезагружаемся в рабочую систему.
Предварительные проверки и сбор данных
Важно зафиксировать текущее состояние, чтобы можно было сравнить после операции и иметь точки отката.
Выполните эти команды и сохраните выводы:
dfFilesystem 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 4kFilesystem 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 -hFilesystem 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/sda16337611Важно: убедитесь, что свободные 4 GB идут сразу после /dev/sda1, как в этом примере. Если свободное пространство находится между другими разделами или в начале диска — этот метод не подойдёт без перемещения разделов.
Подготовка: загрузка в Live-CD / Rescue-систему
Если раздел содержит системные файлы (например, корень /), нужно загрузиться с Live-CD (Knoppix) или любого rescue-образа. Если раздел не содержит системных файлов, можно сделать всё на работающей системе (но размонтируйте раздел).
Выполните перезагрузку:
shutdown -r nowПосле загрузки Live-CD откройте терминал и станьте root:
suУбедитесь, что раздел размонтирован (в Live-системе он обычно не смонтирован):
umount /dev/sda1Проверьте файловую систему без исправлений (только для осмотра):
fsck -n /dev/sda1fsck 1.38 (30-Jun-2005)
e2fsck 1.38 (30-Jun-2005)
/dev/sda1: clean, 159036/765536 files, 1080014/1536000 blocks
Шаг 1. Удаляем журнал (переключаемс¤ в ext2)
tune2fs позволяет убрать флаг журнала. Это нужно, потому что мы будем удалять и пересоздавать раздел, а при этом избегаем конфликтов с внутренним журналом ext3.
tune2fs -O ^has_journal /dev/sda1Ожидаемый вывод:
tune2fs 1.38 (30-Jun-2005)
Важно: эта операция не удаляет данные, а только метаданные журнала. Если что-то пойдет не так, у вас будут исходные inode/блоки в файловой системе — но всё равно держите резервную копию.
Шаг 2. Удаляем и заново создаём раздел с новым размером (fdisk)
Запускаем fdisk для диска (не для раздела):
fdisk /dev/sdaПримечание: используйте /dev/sda, а не /dev/sda1.
В fdisk введите m, чтобы увидеть список команд. Выведите текущую таблицу p и запомните начальный цилиндр /dev/sda1 — в примере это 1.
Удалите раздел №1:
Command (m for help): d
Partition number (1-5): 1Создайте заново первичный раздел №1 и укажите тот же первый цилиндр (важно!), а в качестве последнего цилиндра — максимально доступный до следующего раздела (в примере 1247):
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1305, default 1): 1
Last cylinder or +size or +sizeM or +sizeK (1-1247, default 1247): 1247Проверьте новую таблицу p. Восстановите флаг загрузки (bootable), если он был до этого:
Command (m for help): a
Partition number (1-5): 1Запишите изменения и выйдите:
Command (m for help): wfdisk сообщит о том, что нужно перезагрузить систему, если ядро всё ещё использует старую таблицу разделов. Пример вывода:
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.
Шаг 3. Перезагрузка и проверка
Перезагрузитесь ещё раз в Live-CD/Rescue или оставьте текущую rescue-сессию и заново загрузитесь, чтобы ядро перечитало таблицу разделов:
shutdown -r nowСтаньте root и запустите полную проверку e2fsck:
e2fsck -f /dev/sda1Шаг 4. Изменение размера файловой системы
Если вы не указываете размер в командах resize2fs, утилита автоматически расширит файловую систему до максимально возможного размера в пределах раздела.
resize2fs /dev/sda1Пример вывода:
resize2fs 1.38 (30-Jun-2005)
Resizing the filesystem on /dev/sda1 to 2504124 (4k) blocks.
The filesystem on /dev/sda1 is now 2504124 blocks long.
После увеличения снова можно (и нужно) проверить файловую систему в режиме только для чтения:
fsck -n /dev/sda1fsck 1.38 (30-Jun-2005)
e2fsck 1.38 (30-Jun-2005)
/dev/sda1: clean, 159036/1254176 files, 1062544/2504124 blocks
Шаг 5. Воссоздание журнала (возвращение в ext3)
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.
Перезагрузите систему в обычный режим:
shutdown -r nowЕсли всё прошло успешно, система загрузится, а df уже покажет увеличенный раздел:
dfFilesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 9859036 4224032 5234348 45% /
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 4kFilesystem 4K-blocks Used Available Use% Mounted on
/dev/sda1 2464759 1056008 1308587 45% /
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 -hFilesystem Size Used Avail Use% Mounted on
/dev/sda1 9.5G 4.1G 5.0G 45% /
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/sda110016496Критерии приёмки
- df показывает ожидаемый увеличенный размер для /dev/sda1.
- e2fsck не возвращает ошибок.
- Система успешно загружается из основного диска (если раздел содержал систему).
- Данные целы, критичные сервисы работают.
Риски и меры предосторожности
- Неправильный выбор первого цилиндра при создании нового раздела приведёт к потере доступа к данным. Всегда используйте тот же первый сектор/цилиндр, что и раньше.
- Всегда имейте актуальную резервную копию перед манипуляциями с разделами.
- Если служба использует раздел (монтирован), все операции делайте с разделом размонтированным.
- При ошибке записи таблицы разделов ядро может продолжать использовать старую таблицу — перезагрузка обязательна.
Important: Если вы не уверены в шагах, сделайте образ (dd) раздела или всего диска перед началом.
Альтернативные подходы и когда они лучше
- LVM: если раздел находится под LVM, используйте lvextend + resize2fs (обычно можно онлайн).
- growpart (cloud-utils) и cloud-образ: для виртуальных дисков часто удобнее использовать growpart.
- parted: более современный инструмент, поддерживает GPT и гибкие единицы размеров.
- Перемещение разделов: если свободное пространство не сразу после нужного раздела, можно перемещать разделы (gparted) — рискованно и долго.
Когда этот метод не работает:
- Свободное пространство не смежно с расширяемым разделом.
- Раздел использует LVM — тогда расширять нужно логический том, а не раздел напрямую.
Быстрая шпаргалка команд
- Сбор данных: df, fdisk -l, fdisk -s /dev/sda1, e2fsck -n /dev/sda1
- Убрать журнал: tune2fs -O ^has_journal /dev/sda1
- fdisk: удалить и заново создать раздел, сохранить первый сектор
- Проверить: e2fsck -f /dev/sda1
- Изменить размер: resize2fs /dev/sda1
- Воссоздать журнал: tune2fs -j /dev/sda1
Чеклист для инженера (пошагово)
- Сделать резервную копию / снимок диска.
- Сохранить выводы df и fdisk -l.
- Перезагрузиться в Live-CD (если нужно).
- Размонтировать /dev/sda1: umount /dev/sda1.
- Проверить файловую систему: fsck -n /dev/sda1.
- tune2fs -O ^has_journal /dev/sda1.
- fdisk /dev/sda: удалить и заново создать раздел №1 (тот же первый сектор).
- w → записать таблицу.
- Перезагрузиться в Live-CD/Rescue.
- e2fsck -f /dev/sda1.
- resize2fs /dev/sda1.
- fsck -n /dev/sda1.
- tune2fs -j /dev/sda1.
- Перезагрузиться в рабочую систему.
- Проверить df и сервисы.
План отката и аварийного восстановления
- Если после изменения таблицы разделов ядро потеряло доступ к файловой системе:
- Перезагрузитесь в Live-CD.
- В fdisk восстановите прежние параметры (если у вас сохранён старый fdisk -l вывод).
- Если этого недостаточно — восстановите разделы из резервной копии (dd образ) или восстановите данные из бэкапа.
Когда использовать online-расширение
- ext3/4 поддерживают online-расширение при условии, что раздел увеличился на уровне LVM или блочного устройства (pvresize, lvextend).
- Если у вас LVM, выполните lvextend, затем resize2fs (можно без размонтирования).
Мини-методология принятия решения
- Раздел смежный со свободным пространством? → да: этот метод. → нет: используйте gparted/перемещение разделов или LVM.
- Раздел является LVM? → да: используйте LVM-утилиты.
- Требуется минимальное время простоя? → используйте online-методы (LVM), если возможно.
Небольшая галерея крайних случаев
- Свободное пространство находится после расширенного раздела, а не после /dev/sda1 → надо работать с расширенным и логическим разделом.
- Раздел имеет нестандартный alignment/специдентификаторы → проверьте начало сектора/offset перед пересозданием.
1‑строчная глоссарий
- ext3: файловая система Linux с журналом.
- ext2: файловая система Linux без журнала (легче для некоторых операций восстановления).
- resize2fs: утилита для изменения размера ext2/3/4 FS.
- tune2fs: утилита для изменения опций файловой системы (включает/выключает журнал).
- fdisk: утилита для управления таблицей разделов MBR.
Решение в виде диаграммы (выбор метода)
flowchart TD
A[Есть свободное пространство сразу после раздела?] -->|Да| B[Можно использовать метод fdisk + resize2fs]
A -->|Нет| C[Является ли диск LVM?]
C -->|Да| D[Использовать lvextend + resize2fs 'часто online']
C -->|Нет| E[Использовать gparted/перемещение разделов или новый layout]
B --> F[Сделать backup → LiveCD → tune2fs -O ^has_journal → fdisk → resize2fs → tune2fs -j]
D --> G[lvextend → resize2fs]
E --> H[Рискованно: делать образ диска и тестировать]Тесты и критерии приёмки
- После операции df должен показывать увеличенный размер.
- e2fsck не должен показывать ошибок.
- Восстановление системы из резервной копии должно занимать разумное время в тестах на стенде.
Короткое резюме
Этот метод прост и безопасен при условии, что свободное пространство находится сразу после расширяемого раздела. Он предполагает кратковременную остановку системы (если раздел системный) и работу из Live-CD. Всегда делайте резервные копии и проверяйте начальный сектор/цилиндр перед пересозданием раздела.
Контрольный чек-лист перед выполнением в проде
- Резервная копия создана (полный dd-образ или бэкап данных).
- Сохранены выводы df и fdisk -l.
- Есть доступ к Live-CD и консоли.
- План на откат и время простоя согласованы.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента