Bagaimana cara mengubah ukuran partisi ext4 di luar batas 16TB?

26

Ketika mencoba untuk mengubah ukuran dan Partisi ext4 lama yang dibuat tanpa flag 64bit, resize2fs 1.42 akan gagal jika ukuran baru adalah atau melebihi 16TiB.

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

Saya tidak ingin menyalin file ke media eksternal. Saya tidak ingin mengambil risiko kehilangan data juga. Bagaimana saya bisa mengubah ukuran volume dengan aman?

anx
sumber

Jawaban:

46

Anda mencoba mengubah ukuran sistem file yang dibuat sebelum -O 64bitopsi menjadi default. Dimungkinkan untuk memutakhirkan sistem file ext Anda ke alamat 64 bit, yang memungkinkannya menjangkau volume yang secara signifikan lebih besar (1024 PiB, bukannya 16 TiB).

Dengan asumsi perangkat target Anda dipanggil /dev/mapper/target-device, inilah yang perlu Anda lakukan:

Prasyarat

  1. Ukuran volume ini harus didukung oleh RAID. Kesalahan disk biasa akan menyebabkan kerusakan sebaliknya.
  2. Namun, RAID bukan cadangan . Anda harus menyimpan barang berharga Anda di tempat lain juga.
  3. Pertama, ubah ukuran & verifikasi semua volume di sekitarnya (tabel partisi, enkripsi, lvm).
  4. Setelah mengubah konfigurasi RAID perangkat keras, linux mungkin atau mungkin tidak segera mengakui ukuran maksimum baru. Periksa $ cat /proc/partitionsdan mulai ulang jika perlu.

Gunakan kernel dan e2fsprogs stabil terbaru

  1. Pastikan (periksa uname -r) Anda menjalankan kernel yang dapat menangani dengan benar sistem file 64bit ext4 - Anda ingin menggunakan 4.4.xkernel atau yang lebih baru (default Ubuntu 16 ke atas).
  2. Dapatkan e2fsprogs setidaknya dari versi 1.43

    • Ubuntu 16.04(2016-04-21) dirilis dengan e2fsprogs 1.42.12(2014-08-25)
    • e2fsprogs 1.43 (2016-05-17) adalah rilis pertama yang mampu meningkatkan ukuran alamat extfs.
    • Ubuntu 18.04(2018-04-26) dikirimkan bersama e2fsprogs 1.44.x(baik!)

Jika Anda aktif 16.04dan tidak dapat memutakhirkan ke rilis Ubuntu yang lebih baru, Anda harus mengaktifkan dukungan paket sumber dan menginstal versi yang lebih baru secara manual:

$ 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

Ubah ukuran

Langkah 1: Umount sistem file dengan benar

$ sudo umount /dev/mapper/target-device

Langkah 2: Periksa kesalahan sistem file

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

Langkah 3: Aktifkan dukungan 64bit di sistem file

Konsultasikan man tune2fsdan man resize2fs- Anda dapat mengubah beberapa flag sistem file.

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

Pada HDD RAID tipikal, ini membutuhkan 4 menit beban IO & CPU yang tinggi.

Langkah 4: Ubah ukuran sistem file

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

Jika Anda tidak memberikan ukuran pada baris perintah, resize2fs mengasumsikan "tumbuh ke semua ruang yang tersedia" - ini biasanya yang Anda inginkan. The -pflag diaktifkan kemajuan bar - tetapi mereka hanya menampilkan setelah beberapa langkah awal.

Pada HDD RAID tipikal, ini membutuhkan 4 menit beban IO & CPU yang tinggi.

Verifikasi lagi

Periksa kembali sistem file

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

e2fsck dari versi yang lebih baru mungkin menyarankan untuk memperbaiki cap waktu atau batas pohon yang ditangani versi sebelumnya dengan buruk. Ini bukan indikasi masalah serius dan Anda dapat memilih untuk memperbaikinya sekarang atau nanti.

Jika terjadi kesalahan, jangan tidak panik dan jangan tidak mencoba untuk menulis ke volume; berkonsultasi dengan seseorang yang memiliki pengetahuan luas tentang sistem file, karena operasi lebih lanjut kemungkinan akan menghancurkan data!

Jika tidak ada kesalahan, remount perangkat:

$ sudo mount /dev/mapper/target-device

Keberhasilan!

Anda tidak memerlukan e2fsprogs versi non-Ubuntu untuk melanjutkan operasi sistem file yang ditingkatkan - kernel mendukungnya untuk beberapa waktu sekarang. Itu hanya perlu untuk memulai upgrade.


Untuk referensi, ada pesan kesalahan serupa yang akan dicetak mke2fs jika diminta untuk membuat perangkat besar dengan opsi yang tidak pantas:

$ 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.
anx
sumber
1
Ini benar. Saya ingin menambahkan bahwa Redhat (jadi RHEL, Centos, dll) dulu lebih suka XFS daripada Ext4 di installer mereka ketika mempartisi sistem file lebih dari 16TB, dan sekarang hanya lebih suka XFS langsung sebagai sistem file default.
Diablo-D3
Ya, kebanyakan kernel lama yang masih signifikan di Dunia RedHat belum mengandung dukungan stabil untuk 64bit ext4. Ubuntu Afaik berjalan dengan apa yang dikatakan banyak guru linux, ext4 harus diganti oleh btrfs - meskipun ext4 dekat dengan btrfs dalam fitur sekarang, saya percaya btrfs lebih elegan dalam desain dan mungkin bahkan lebih rentan terhadap bug.
anx
2
btrfs tidak siap untuk produksi, dan mungkin tidak akan pernah siap untuk produksi, karena Oracle telah menempatkan pengembangannya pada back burner. Pendapat pribadi saya adalah jika Anda membutuhkan tingkat kerumitan sistem file tersebut, gunakan root XFS 8GB mungil yang dikombinasikan dengan penggunaan ZFS untuk kebutuhan penyimpanan data Anda yang sebenarnya.
Diablo-D3
0

Itu terjadi pada saya baru-baru ini, dengan Ubuntu 18,04 yang telah diperbarui setelah awalnya diinstal dengan Ubuntu 16,04 ... Array penyimpanan (/ dev / sdb) pada awalnya telah dipartisi menjadi dua partisi 14 TB, dan itu adalah dengan ingin memperbesar partisi pertama ke 28 TB yang terjadi masalah.

Saya tidak perlu mengunduh versi baru resize2fs karena itu sangat baru.

# resize2fs 
resize2fs 1.44.1 (24-Mar-2018)

Satu-satunya masalah adalah mengubah 64-bit partisi 1 yang telah diformat dalam 32 bit ... Alih-alih mengundang pembaca untuk membaca dokumentasi tune2fs (seperti yang disarankan Anx), saya mengusulkan contoh nyata!

# 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).

Akhirnya, kami memperbesar partisi disk!

# 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
sumber