Как изменить размер ext3-раздела без потери данных
Кратко: пошаговое руководство по уменьшению и увеличению ext3-раздела без потери данных, с примерами команд, проверками и планом отката. Подойдёт для дисков без LVM; для удалённых серверов нужен rescue/Live-CD. Всегда сохраняйте резервную копию перед операцией.
К чему это руководство
Это руководство показывает, как уменьшить (shrink) и увеличить (grow) существующий ext3-раздел и как объединять два ext3-раздела на диске без LVM. Показанные шаги были опробованы на тестовой системе и описаны подробно: от проверки файловой системы и удаления журнала до пересоздания раздела и восстановления ext3-журнала. Внимание: при неправильных расчётах при уменьшении раздела возможно потеря данных — обязательно создайте резервную копию.
Важно: в терминалах и в примерах я запускаю команды от root. На Ubuntu можно стать root так:
sudo suОпределения в одну строку
- ext2/3/4: семейство файловых систем Linux; ext3 — ext2 с журналом.
- журнал (journal): структура ext3 для безопасного восстановления после сбоя.
- resize2fs: утилита изменения размера файловой системы ext2/3 (после отключения журнала для ext3).
Применимость и ограничения
Кто может использовать это руководство:
- администраторы локальных (физически доступных) серверов;
- пользователи домашних и тестовых машин без LVM;
- инженеры, имеющие доступ к rescue-системе для удалённых серверов.
Когда это НЕ подойдёт:
- разделы на RAID (см. раздел «Когда это не сработает»);
- зашифрованные разделы (LUKS) без расшифровки и корректной последовательности действий;
- если система полностью на этом разделе и у вас нет Live-CD / rescue-сессии.
Важные предупреждения
Important: перед любыми изменениями создайте резервную копию (полный образ или хотя бы копию важных данных). При уменьшении раздела всегда оставляйте запас по объёму — если указать размер меньше, чем занято, данные будут потеряны.
Note: все команды в примерах сохраняются в неизменном виде. Переименуйте /dev/sda1 на свой целевой раздел при выполнении действий.
Содержание
- Предварительная заметка
- Уменьшение ext3-раздела (пошагово)
- Как рассчитать новый размер — методика и примеры
- Восстановление журнала и проверка
- Расширение ext3-раздела (общая заметка)
- Альтернативные подходы и инструменты
- Когда это не сработает — частые ограничения
- Проверки, критерии приёмки и тесты
- План действий (SOP) и откат
- Таблица команд (cheat sheet)
- Контрольный список ролей
- Ментальные модели и советы
- Краткое глоссарий
- Итог
Предварительная заметка
В примере оригинального руководства использовалась тестовая система Ubuntu (в примерах — Knoppix Live-CD). Предположим, целевой раздел — /dev/sda1. Если у вас другой путь — замените его в командах (например, /dev/hda5, /dev/sdb3).
Если раздел не содержит системных файлов (например, это /home или бэкап-раздел), всё можно выполнять с запущенной системой. Если раздел содержит корень / или другие системные каталоги — потребуется Live-CD / rescue-система с утилитами: fdisk, umount, fsck, tune2fs, e2fsck, resize2fs.
Если вы работаете с удалённой машиной без физического доступа, используйте rescue-режим от провайдера или загрузочный ISO через виртуальный KVM.
Уменьшение ext3-раздела — подробный пример
Ниже приведены шаги, которые были выполнены на тестовой системе. Следуйте последовательности, внимательно проверяя результаты каждой команды.
- Соберите исходные данные о разделе и использовании диска.
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Этот вызов показывает блоки по 4К, что удобно для дальнейших расчётов:
Filesystem 4K-blocks Used Available Use% Mounted on
/dev/sda1 2464759 1058727 1280826 46% /
...- Выполните проверку файловой системы в режиме только чтения (без исправлений):
fsck -n /dev/sda1Ожидается вывод типа:
fsck 1.38 (30-Jun-2005)
e2fsck 1.38 (30-Jun-2005)
/dev/sda1: clean, 159037/1254176 files, 1095299/2504124 blocks
- Удалите журнал ext3, чтобы превратить раздел во временный ext2 — resize2fs не поддерживает изменение размеров ext3 с активным журналом:
tune2fs -O ^has_journal /dev/sda1- Запустите принудительную проверку e2fsck для корректировки метаданных:
e2fsck -f /dev/sda1Ожидаемый проход проверки (пример):
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. На этом этапе вы решаете, насколько меньше будет раздел. В примере занято 4.1ГБ, поэтому безопасно уменьшить до ~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 /dev/sdaВ fdisk: выполните d (delete) для раздела 1, затем n (new) -> p (primary) -> 1 (номер). Введите первый цилиндр — тот же (обычно 1). Для последнего цилиндра можно задать размер в килобайтах с префиксом +.
- Расчёт размера раздела: методика
- У вас есть блоки: B = 1536000
- Размер блока: S = 4K (4096 байт)
- Минимальный размер в килобайтах: MinKB = B S / 1024 = 1536000 4096 / 1024 = 1536000 * 4 = 6144000 KB
Добавьте буфер — безопасно 3–5%:
- 3% запас: 6144000 * 1.03 = 6328320 KB
- 5% запас: 6144000 * 1.05 = 6451200 KB
В fdisk укажите, например:
Last cylinder or +size or +sizeM or +sizeK (1-1247, default 1247): +6328320K- Пометьте раздел как загрузочный, если это был загрузочный раздел (команда a в fdisk). Затем запишите таблицу (w).
fdisk может сообщить об ошибке повторного чтения таблицы: “Re-reading the partition table failed with error 16: Device or resource busy.” Это нормально — новая таблица будет применена после перезагрузки.
- Перезагрузите систему и снова проверьте раздел (опять в Live-CD/rescue):
shutdown -r nowПосле загрузки в Live-CD станьте root:
suИ выполните:
fsck -n /dev/sda1- Воссоздайте журнал ext3 (вернём раздел в 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 показывает новый ожидаемый размер и корректное использование: занятое место не потеряно.
- В выводе fsck нет предупреждений об ошибках.
- Идентификаторы файлов и права сохранены (проверка случайных файлов и каталогов).
Проверочные команды:
df -h
fdisk -l
fsck -n /dev/sda1
tune2fs -l /dev/sda1 # показать параметры файловой системы и состояние журналаПримеры ожидаемых изменений (по результату теста):
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 5.8G 4.1G 1.6G 73% / Если какие-то точки не сходятся — отложите принятие решения и выполните дополнительные проверки.
Как рассчитать новый размер — подробные рекомендации
Шаги расчёта, чтобы не потерять данные при уменьшении раздела:
- Узнайте занятое место в байтах/KB/MB/GB (df, du).
- Округлите вверх с запасом: +3–10% (зависит от важности). Для серверов лучше +10%.
- Переведите требуемый размер в блоки, если нужно (resize2fs и fdisk работают с разными единицами).
- Если resize2fs уже сказал количество блоков и размер блока — используйте их напрямую.
Пример: если resize2fs вывел 1536000 блоков по 4К:
- Байт: 1536000 * 4096 = 6291456000 байт ≈ 6,291,456 KB ≈ 6,147 MB ≈ 6.00 GB (в зависимости от единиц)
- Рекомендуемый размер с 5% запасом: 6.00 GB * 1.05 = 6.30 GB
В fdisk удобнее указывать в KB с префиксом + и буквой K.
Расширение ext3-раздела (основные заметки)
Процесс расширения (grow) проще, если есть свободное место после раздела:
- Убедитесь, что раздел не смонтирован, или что вы расширяете с работающей системой (resize2fs поддерживает онлайн-увеличение для ext3, но безопасность важна).
- Измените таблицу разделов, увеличив конец раздела до требуемого размера (fdisk или parted).
- Запустите resize2fs /dev/sda1 без указания размера (resize2fs автоматически расширит фс до размера раздела):
resize2fs /dev/sda1Если расширять корневой раздел на работающей системе, лучше использовать Live-CD или убедиться в поддержке онлайн-расширения и создании резервной копии.
Альтернативные подходы и инструменты
- LVM (Logical Volume Manager): предоставляет гибкое изменение размеров логических томов без пересоздания разделов. Если у вас LVM, операция обычно проще.
- GParted Live: графический инструмент для изменения размеров и перемещения разделов (подходит для простых случаев и домашних ПК).
- parted/parted-rescue: для сложных сценариев с нестандартной разметкой.
- sfdisk и sgdisk: для автоматизированного экспорта/импорта таблицы разделов (полезно для бэкапа таблицы перед изменениями).
Когда выбирать альтернативу:
- Если планируете частые изменения — стоит перейти на LVM.
- Если разделы находятся на RAID — сначала работайте с уровнем RAID (mdadm), затем с файловой системой внутри MD.
- Если вы предпочитаете GUI — GParted Live ускорит задачу, но всё равно создавайте резервную копию.
Когда это не сработает — ограничения и частые причины ошибок
- Зашифрованный раздел (LUKS): нужно сначала расшифровать контейнер, работать с логическим томом внутри.
- Устройства на RAID: нельзя просто менять отдельный диск — сначала манипулируйте mdadm-конфигурацией.
- Разделы с нестандартными block size или несовместимым файловым форматом (reiserfs, xfs и т. п.): resize2fs и tune2fs работают только с ext2/3/4.
- Если resize2fs сообщает, что файлсистема слишком большая для уменьшения — не продолжайте.
- Программы загрузки, которые зависят от физического расположения блоков (редкие случаи старых LILO), могут перестать загружаться — проверьте конфигурацию загрузчика.
План действий (SOP) — краткий свод шагов
- Обслуживание и коммуникация: уведомите пользователей, планируйте окно обслуживания.
- Резервная копия: создайте образ/бэкап данных.
- Подготовка: загрузитесь в Live-CD/rescue если надо.
- Проверка: fsck -n /dev/XXX
- Удаление журнала (для уменьшения): tune2fs -O ^has_journal /dev/XXX
- e2fsck -f /dev/XXX
- resize2fs /dev/XXX <новый размер> или resize2fs /dev/XXX (при расширении)
- fdisk /dev/sdX: пересоздать разделы (при уменьшении) или расширить (при увеличении)
- Перезагрузка в Live-CD, fsck -n /dev/XXX
- Воссоздание журнала: tune2fs -j /dev/XXX
- Перезагрузка в обычный режим
- Проверка: df -h, fsck, проверка случайных файлов
Runbook инцидента и откат
Если после операции раздел не монтируется или данные неверны:
- Не делайте новых записей на диск — минимизируйте риск перезаписи.
- Попробуйте fsck с опциями восстановления: e2fsck -f -y /dev/sda1 (автоматически ответит да на исправления).
- Если были сохранены исходные данные таблицы разделов (рекомендуется предварительно экспортировать sfdisk), восстановите таблицу:
Сохранение таблицы до изменений:
sfdisk -d /dev/sda > /root/sda-partition-table-backup.sfdiskВосстановление:
sfdisk /dev/sda < /root/sda-partition-table-backup.sfdisk- Если таблица повреждена, используйте testdisk для восстановления структуры разделов.
- При серьёзных проблемах обращайтесь к бэкапу (восстановление образа диска).
Чек-лист ролей
Администратор (тот, кто выполняет команды):
- Убедился в наличии резервной копии.
- Выполнил все проверочные команды.
- Задокументировал начальные значения (выводы df, fdisk -l, fdisk -s).
Офис резервного копирования:
- Подтвердил доступность бэкапов и состояние хранения.
- Подготовил план восстановления.
Оповещение пользователей:
- Отправлено уведомление о простое и рисках.
Таблица команд (cheat sheet)
- Просмотр использования: df -h
- Просмотр блоков 4K: df -B 4k
- Проверка файловой системы (только чтение): fsck -n /dev/sda1
- Удаление журнала ext3: tune2fs -O ^has_journal /dev/sda1
- Принудительная проверка: e2fsck -f /dev/sda1
- Изменение размера фс: resize2fs /dev/sda1 6000M
- Создание журнала: tune2fs -j /dev/sda1
- Редактирование таблицы разделов: fdisk /dev/sda
- Экспорт таблицы разделов: sfdisk -d /dev/sda > backup.sfdisk
- Восстановление таблицы: sfdisk /dev/sda < backup.sfdisk
Тесты и критерии приёмки (примеры)
Тест 1: Перезагрузка и загрузка системы
- Ожидается: система загружается и все сервисы стартуют.
Тест 2: Проверка целостности файлов
- Выполнить выборочные сравнения контрольных сумм файлов (если были заготовлены).
Тест 3: Верификация свободного места
- df -h показывает ожидаемый размер раздела и отсутствие неожиданного уменьшения доступного пространства.
Тест 4: Журнал файловой системы
- tune2fs -l /dev/sda1 должен показать запись о наличии журнала и интервал проверки.
Ментальные модели и эвристики
- Всегда думайте в терминах занимаемых блоков, а не только в гигабайтах — это точнее для файловых систем.
- Уменьшение требует удаления беспорядка: удалите временные файлы, почистите логи, выполните du -sh /home/*, прежде чем уменьшать.
- Запас в 5% обычно достаточен для рабочих столов; для серверов с активными базами данных — 10%.
Mermaid: простое дерево решений
flowchart TD
A{Нужно изменить размер раздела?} -->|Да| B{Раздел в LVM?}
B -->|Да| C[Использовать LVM tools 'lvresize, pvresize']
B -->|Нет| D{Раздел на RAID или зашифрован?}
D -->|RAID| E[Работа через mdadm, затем FS]
D -->|Зашифрован| F[Расшифровать контейнер, работать внутри]
D -->|Нет| G{Нужно уменьшить?}
G -->|Да| H[Выключить журнал, e2fsck, resize2fs, пересоздать раздел]
G -->|Нет| I[Увеличить: расширить раздел и запустить resize2fs]
C --> Z[Проверка, бэкап, тесты]
E --> Z
F --> Z
H --> Z
I --> ZКороткий глоссарий
- fsck: проверка файловой системы.
- e2fsck: утилита для проверки ext2/3/4.
- tune2fs: настройка параметров ext* файловой системы (включая журнал).
- resize2fs: изменение размера файловой системы ext2/3/4.
- fdisk: утилита для редактирования таблицы разделов.
- sfdisk: утилита для дампа/восстановления таблицы разделов.
Локальная совместимость и советы для русскоязычных администраторов
- Если используете локализованные дистрибутивы, в Live-CD могут быть утилиты с теми же именами; команды и синтаксис одинаковы.
- Для удалённых серверов у провайдеров часто есть web-консоль с опцией Rescue mode — заранее узнайте, какие утилиты доступны в rescue-образе.
Резюме
- Уменьшение ext3-раздела требует временной деактивации журнала, проверки и изменения размеров файловой системы, а затем пересоздания раздела.
- Всегда делайте резервные копии и проводите проверку перед и после операции.
- Для гибкости и минимизации рисков в будущем рассмотрите переход на LVM.
Итоговое напоминание: перед выполнением команд на рабочем сервере — проверьте план и резервные копии. Если сомневаетесь, протестируйте процедуру на аналогичном тестовом окружении.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента