LINUX.ORG.RU

расширить ext4 вниз

 ,


0

2

необходимо расширить раздел с ext4 вниз. понятно, что напрямую этого не сделать.
пока что придумал вот так:

  1. скопировать все структуры ext4 с раздела.
  2. поменять данные о размере раздела в суперблоке.
  3. во всех файловых inode прибавить к адресам блоков число блоков, добавляемое к разделу.
  4. то же самое проделать с Extent Tree.
  5. удалить старый раздел, создать новый - с меньшим адресом начала, записать исправленные структуры ext4 в начало.
  6. ???
  7. PROFIT!!!

теперь вопросы:

  • все ли это, что необходимо?
  • есть какие-то средства автоматизации? если суперблок я могу поправить руками, то все 100500 inode - нет. или, может быть, знатоки ext4 помогут мне написать awk/sed-скрипт для этих целей?
☆

Отличный план! Пиши скорее, народ жаждет этой утилиты уже 15 лет!

anonymous
()

понятно, что напрямую этого не сделать.

Ну, стого говоря вы не правы, это можно сделать посредством dd. В начале вам всего лишь нужно переместить все структуры файловой системы раздела как бы назад по диску, ближе к началу диска, что бы текущий супеблок файловой системы начинался с начала новой границы раздела, с того сектора, до котрого вы хотите расширить раздел вниз, затем изменяете запись в таблице разделов и попросту увеличиваете размер файловой системы до новых размеров раздела вверх.

В начале размонтируете раздел, далее запускаете dd с указанием считывать 1Kb блоки, в качестве устройства приёмника указываете этот же диск, но указываете параметр seek, в котором указываете сколько 1Kb блоков нужно пропустить с начала диска, в параметре count указываете текущий размер раздела в 1Kb блоках, указываете параметр bs=1K, т.е. размер блока, которым оперирует dd равным 1Kb (1 килобайту). Есетственно нижняя граница раздела должна быть кратна 1Kb. Если это не так, то либо подбирайте другой размер блока (bs) и прочие параметры, либо подбирайте нижнюю границу. 1Kb блок - это два сектора по 512 байт.

После завершения перемещения раздела создаёте новую запись в таблице разделов посредством fdisk и раширяете файловую систему посрдеством resize2fs.

Как видите, операция довольно проста, по крайней мере гарантирует почти 100% результат, по сравнению с тем, что описали вы.

Удачи.

kostik87 ★★★★★
()

все ли это, что необходимо?

lvm, lvextend

anonymous
()
Ответ на: комментарий от kostik87

но ведь в inode указаны относительные адреса. если воспользоваться вашим решением (которое является частью моего), я потеряю все свои файлы.

Lincor ☆
() автор топика
Ответ на: комментарий от Lincor

но ведь в inode указаны относительные адреса.

Относительно начала файловой системы.

которое является частью моего

Не вижу в предложенном вами алгоритме ни слова о dd, у вас там вообще муть написана.

Я вам попросту предложил передвинуть раздел целиком вниз, изменить запись в таблице разделов и расширить файловую систему до нового размера раздела.

скопировать все структуры ext4 с раздела. поменять данные о размере раздела в суперблоке. во всех файловых inode прибавить к адресам блоков число блоков, добавляемое к разделу. то же самое проделать с Extent Tree. удалить старый раздел, создать новый - с меньшим адресом начала, записать исправленные структуры ext4 в начало.

Вот этого ничего в предложенном мной варинте нет.

Удачи.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Относительно начала файловой системы.

а оно смещается вниз. соответственно, все inode становятся некорректными.

Не вижу в предложенном вами алгоритме ни слова о dd, у вас там вообще муть написана.

копировать/записывать как раз можно с помощью dd.

Я вам попросту предложил передвинуть раздел целиком вниз

а, ну тогда понятно. это не совсем то, что нужно, поскольку раздел очень большой и его перемещение целиком займет чересчур много времени.

Lincor ☆
() автор топика
Последнее исправление: Lincor (всего исправлений: 2)

это что за нахер. Linux director suite Дениса Попова?

darkenshvein ★★★★★
()

gparted может подвинуть раздел, но это долго + нужно грузится с livecd/liveusb. насчёт безопастности такого действия gparted честно предупреждает, если вы двигаете таким образом данные и у вас нет на них бэкапов, вы ссзб.

dhampire ★★★
()
Ответ на: комментарий от dhampire

в ОП речь о расширении раздела вниз без перемещения собственно данных (их может быть очень много), только метаданных ФС.

Lincor ☆
() автор топика
Ответ на: комментарий от Lincor

а оно смещается вниз. соответственно, все inode становятся некорректными.

Смещается весь раздел, а точнее файловая система целиком вниз, а затем расширяется.

а, ну тогда понятно. это не совсем то, что нужно

Вот я и вижу, что вы не поняли написанное мной, к тому же два раза написанное в моём первом сообщении.

поскольку раздел очень большой и его перемещение целиком займет чересчур много времени.

В таком случае покупайте ещё один диск, если его нет, копируйте на него данные, удаляйте исходный раздел, создавайте его заного в нужном месте и с нужным размером и затем возвращайте на него скопированные данные. Все прочие утилиты, которые позволяют изменить нижнюю границу раздела как раз таки перемещают посекторно текущий раздел вниз, а затем позволяют его расширить.

То что вы предлагаете с большой долей вероятности приведёт к потере всех данных на файловой системе.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

То что вы предлагаете с большой долей вероятности приведёт к потере всех данных на файловой системе.

если все правильно учесть - не приведет.

Lincor ☆
() автор топика
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.