Как изменить размер раздела ext4 за пределы 16 ТБ?

26

При попытке изменить размер и старый раздел ext4, созданный без 64-битного флага, resize2fs 1.42 завершится ошибкой, если новый размер будет больше или равен 16 ТБ.

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

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

апх
источник

Ответы:

46

Вы пытаетесь изменить размер файловой системы, которая была создана до того, как -O 64bitопция стала стандартной. Возможно обновить вашу файловую систему ext до 64-битных адресов, что позволит ей охватывать значительно большие объемы (1024 ПиБ вместо 16 ТиБ).

Предполагая, что ваше целевое устройство называется /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

На типичном жестком диске RAID это занимает 4 минуты высокой нагрузки ввода-вывода и загрузки процессора.

Шаг 4: изменить размер файловой системы

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

Если вы не передаете размер в командной строке, resize2fs предполагает "увеличение до всего доступного пространства" - обычно это именно то, что вам нужно. -pФлаг включен прогресс баре - но те , отображаются только после некоторых первоначальных шагов.

На типичном жестком диске RAID это занимает 4 минуты высокой нагрузки ввода-вывода и загрузки процессора.

Подтвердите еще раз

Проверьте файловую систему снова

$ 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 более элегантен по дизайну и, возможно, даже менее подвержен ошибкам.
беспокойство
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).
MaxiReglisse
источник