Як змінити розмір розділу ext4 понад 16TB?


26

При спробі змінити розмір і старий розділ ext4, створений без 64-бітового прапора, resize2fs 1,42 не вдасться, якщо новий розмір становить або перевищує 16TiB.

$ resize2fs -p /dev/mapper/target-device
resize2fs: New size too large to be expressed in 32 bits

Я не хочу копіювати файли на зовнішній носій. Я також не хочу ризикувати втратою даних. Як я можу безпечно змінити гучність?

Відповіді:


46

Ви намагаєтесь змінити розмір файлової системи, створеної до того, як -O 64bitпараметр став типовим. Можна оновити вашу файлову систему ext до 64-бітових адрес, що дозволяє їй охоплювати значно більший обсяг (1024 PiB замість 16 TiB).

Якщо припустити, що викликається ваш цільовий пристрій /dev/mapper/target-device, це потрібно зробити:

Передумови

  1. Цей розмір гучності повинен бути підкріплений RAID. Регулярні помилки на диску в іншому випадку можуть заподіяти шкоду.
  2. Проте RAID - це не резервне копіювання . Ви також повинні зберігати свої цінності в інших місцях.
  3. Спочатку змініть розмір та перевірте всі навколишні томи (таблиці розділів, шифрування, lvm).
  4. Після зміни конфігурації апаратного RAID, Linux може або не може негайно визнати новий максимальний розмір. Перевірте $ cat /proc/partitionsі перезавантажте, якщо потрібно.

Використовуйте недавно стабільне ядро ​​та e2fsprogs

  1. Переконайтесь, що (перевірте uname -r), що ви працюєте з ядром, яке може правильно обробляти 64-бітну файлову систему ext4 - ви хочете використовувати 4.4.xядро або пізніші версії (за замовчуванням Ubuntu 16 і вище).
  2. Придбайте e2fsprogs принаймні версії 1.43

    • Ubuntu 16.04(2016-04-21) було випущено з e2fsprogs 1.42.12(2014-08-25)
    • e2fsprogs 1.43 (2016-05-17) - це перший випуск, здатний оновити розмір адреси extfs.
    • Ubuntu 18.04(2018-04-26) кораблі з e2fsprogs 1.44.x(добре!)

Якщо ви ввімкнули16.04 і не можете оновити до новішої версії Ubuntu, вам доведеться ввімкнути підтримку вихідного пакета та встановити нову версію вручну:

$ resize2fs
# if this  prints version 1.43 or above, continue to step 1
$ sudo apt update
$ sudo apt install git
$ sudo apt build-dep e2fsprogs
$ cd $(mktemp -d)
$ git clone -b v1.44.2 https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git e2fsprogs && cd e2fsprogs
$ ./configure
$ make
$ cd resize
$ ./resize2fs
# this should print 1.43 or higher
# if this prints any lower version, panic
# use `./resize2fs` instead of `resize2fs` for the rest of the steps

Змініть розмір

Крок 1: Правильно виконайте читання файлової системи

$ sudo umount /dev/mapper/target-device

Крок 2: Перевірте файлову систему на наявність помилок

$ sudo e2fsck -fn /dev/mapper/target-device

Крок 3: Увімкніть підтримку 64 біт у файловій системі

Порадьтеся man tune2fsі man resize2fs- ви можете змінити деякі прапори файлової системи.

$ sudo resize2fs -b /dev/mapper/target-device

У типовому HDD RAID це займає 4 хвилини високого навантаження на IO та процесор.

Крок 4: Змініть розмір файлової системи

$ sudo resize2fs -p /dev/mapper/target-device

Якщо ви не передаєте розмір у командному рядку, resize2fs передбачає "зростати до всього доступного простору" - це зазвичай саме те, що ви хочете. -pПрапор включений прогрес барі - але ті , відображаються тільки після деяких початкових кроків.

У типовому HDD RAID це займає 4 хвилини високого навантаження на IO та процесор.

Перевірте ще раз

Перевірте файлову систему ще раз

$ sudo e2fsck -fn /dev/mapper/target-device

e2fsck новіших версій може запропонувати виправити часові позначки або розмістити дерева, з якими попередні версії погано оброблялися. Це не є ознакою будь-якої серйозної проблеми, і ви можете вирішити її зараз або пізніше.

Якщо трапляються помилки, не панікуйте і не намагайтеся записувати до тома; проконсультуйтеся з кимсь із знаними знаннями файлової системи, оскільки подальші операції, можливо, знищать дані!

Якщо помилок не виникає, повторно встановіть пристрій:

$ sudo mount /dev/mapper/target-device

Успіху!

Вам не знадобиться жодна версія e2fsprogs, що не є Ubuntu, для продовження роботи оновленої файлової системи - ядро ​​підтримує їх вже досить довго. Потрібно було лише ініціювати оновлення.


Для довідки, аналогічне повідомлення про помилку буде надруковано mke2fs, якщо його попросять створити величезний пристрій з невідповідними параметрами:

$ mke2fs -O ^64bit /dev/huge
mke2fs: Size of device (0x123456789 blocks) is too big to be expressed in 32 bits using a blocksize of 4096.

1
Це вірно. Я хотів би додати, що Redhat (таким чином RHEL, Centos тощо) колись віддав перевагу XFS над Ext4 у своєму інсталяторі при розділенні файлової системи на 16 ТБ, а тепер просто віддаю перевагу XFS прямо як файлову систему за замовчуванням.
Diablo-D3

Так, більшість старих ядер, все ще значущих у світі RedHat, поки не містять стабільної підтримки для 64-бітного ext4. Afaik Ubuntu іде з тим, що кажуть багато гуру Linux, що ext4 має бути замінено btrfs - хоча ext4 близький btrfs за своїми функціями, я вважаю, що btrfs є більш елегантним за дизайном і, можливо, навіть менш схильним до помилок.
anx

2
btrfs не готовий до виробництва і може ніколи не бути готовим до виробництва, оскільки Oracle поставив його на задній пальник. Моя особиста думка - якщо вам потрібен такий рівень складності файлової системи, використовуйте крихітний корінь XFS 8 ГБ у поєднанні з використанням ZFS для ваших фактичних потреб у зберіганні даних.
Diablo-D3

0

Це сталося зі мною недавно, з Ubuntu 18.04, який був оновлений після встановлення спочатку з 16.04 Ubuntu ... Масив зберігання (/ dev / sdb) був спочатку розділений на два 14 ТБ-розділи, і це, бажаючи збільшити перший розділ на 28 ТБ, що сталася проблема.

Мені не потрібно було завантажувати нову версію resize2fs, оскільки вона була зовсім недавно.

# resize2fs 
resize2fs 1.44.1 (24-Mar-2018)

Єдина проблема полягала в перетворенні 64-розрядного розділу 1, який був відформатований у 32 біти ... Замість того, щоб запросити читача ознайомитися з документацією tune2fs (як пропонує Anx), я пропоную справжній приклад!

# tune2fs -O 64bit /dev/sdb1
tune2fs 1.44.1 (24-Mar-2018)
Please run "resize2fs -b /dev/sdb1" to enable 64-bit mode.

# resize2fs -b /dev/sdb1
resize2fs 1.44.1 (24-Mar-2018)
Convert the file system to 64 bits.
The file system on /dev/sdb1 now has a size of 3662109119 blocks (4k).

Нарешті, ми збільшуємо розділ диска!

# resize2fs /dev/sdb1
resize2fs 1.44.1 (24-Mar-2018)
Resizing the file system on /dev/sdb1 to 7324303099 (4k) blocks.
The file system on / dev / sdb1 now has a size of 7324303099 blocks (4k).
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.