Bir ext4 bölümünü 16TB sınırının ötesinde nasıl yeniden boyutlandırabilirim?


26

64bit bayrağı olmadan oluşturulan eski ext4 Bölümü yeniden boyutlandırmaya çalışırken, yeni boyut 16TiB ise ya da üstüne çıkarsa resize2fs 1.42 başarısız olur.

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

Dosyaları harici bir ortama kopyalamak istemiyorum. Ben de veri kaybı riskini almak istemiyorum. Birimi güvenli bir şekilde nasıl yeniden boyutlandırabilirim?

Yanıtlar:


46

-O 64bitSeçenek varsayılan hale gelmeden önce oluşturulan bir dosya sistemini yeniden boyutlandırmaya çalışıyorsunuz . Harici dosya sisteminizi 64 bit adrese yükseltmek mümkündür, bu da önemli ölçüde daha büyük (16 TiB yerine 1024 PiB) birim sürebilir.

Hedef cihazınızın çağrıldığını varsayarsak, /dev/mapper/target-deviceyapmanız gereken budur:

Ön şartlar

  1. Hacminin Bu boyut gerekir RAID desteklenmesi gerekir. Düzenli disk hataları olacaktır , aksi takdirde zarar.
  2. Yine de, RAID bir yedekleme değil . Sen gerekir sizin değerli yanı başka yerde saklanır var.
  3. Öncelikle çevresindeki tüm hacimleri yeniden boyutlandırın ve doğrulayın (bölüm tabloları, şifreleme, lvm).
  4. Donanım RAID yapılandırmasını değiştirdikten sonra, linux yeni maksimum boyutu hemen kabul edebilir veya etmeyebilir. $ cat /proc/partitionsGerekirse kontrol edin ve yeniden başlatın.

Yeni kararlı bir çekirdek ve e2fsprogs kullanın

  1. uname -r64bit ext4 dosya sistemlerini düzgün bir şekilde işleyebilecek bir çekirdek çalıştırdığınızdan (kontrol edin ) emin olun - bir 4.4.xçekirdek veya daha sonra kullanmak istiyorsunuz (varsayılan Ubuntu 16 ve üstü).
  2. En az sürümde e2fsprogs edinin 1.43

    • Ubuntu 16.04(2016-04-21) e2fsprogs 1.42.12(2014-08-25) ile yayınlandı.
    • e2fsprogs 1.43 (2016-05-17) extfs adres boyutunu yükseltme yeteneğine sahip ilk sürümdür.
    • Ubuntu 18.04(2018-04-26) e2fsprogs 1.44.x(iyi!) İle gönderilir

Eğer biri 16.04ve daha yeni Ubuntu sürümü yükseltme olamaz, sen gerekecektir kaynak paketi desteğini etkinleştirmek ve elle yeni bir sürümünü yükleyin:

$ 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

Yeniden Boyutlandırma

Adım 1: Dosya sistemini doğru şekilde düzenleyin

$ sudo umount /dev/mapper/target-device

Adım 2: Dosya sistemindeki hataları kontrol edin

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

Adım 3: Dosya sisteminde 64 bit desteğini etkinleştirme

Consult man tune2fsve man resize2fs- Biraz dosya sistemi bayrakları değiştirmek için olabilir ile.

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

Tipik bir HDD RAID'de, bu 4 dakikalık yüksek IO ve CPU yükü alır.

Adım 4: Dosya sistemini yeniden boyutlandırın

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

Komut satırında bir boyut iletmezseniz , resize2fs "mevcut tüm alanlara büyür" varsayıyor - bu tam olarak istediğiniz şey. -pBayrak ilerleme çubukları etkin - ama o sadece bazı ilk adımlar sonra gösterilecek.

Tipik bir HDD RAID'de, bu 4 dakikalık yüksek IO ve CPU yükü alır.

Tekrar doğrula

Dosya sistemini tekrar kontrol et

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

Daha yeni sürümlerin e2fsck'i, önceki sürümlerin kötü işlediği zaman damgalarını veya kapsam ağaçlarını düzeltmeyi önerebilir. Bu, herhangi bir ciddi sorunun göstergesi değildir ve şimdi veya daha sonra düzeltmeyi tercih edebilirsiniz.

Hata oluşursa, do not panik ve do not hacmine yazma girişimi; Daha fazla işlem muhtemelen veriyi yok edeceğinden, dosya sistemi hakkında geniş bilgiye sahip birisine danışın!

Hata yoksa, cihazı tekrar monte edin:

$ sudo mount /dev/mapper/target-device

Başarı!

Yükseltilmiş dosya sisteminin sürekli çalışması için e2fsprogs'un Ubuntu olmayan bir sürümüne ihtiyacınız olmayacak - çekirdek artık bir süredir bunları destekliyor. Sadece yükseltme işlemini başlatmak gerekliydi.


Başvuru için, uygun olmayan seçeneklere sahip büyük bir cihaz oluşturması istendiğinde mke2fs yazdıracak benzer bir hata mesajı var:

$ 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
Doğru. Redhat'ı (böylece RHEL, Centos, vb.) 16TB üzerindeki bir dosya sistemini bölümlerken, Ext4 yerine XFS'yi tercih ettiğini ve şimdi de sadece varsayılan dosya sistemi olarak tamamen XFS'yi tercih ettiğini eklemek istiyorum.
Diablo-D3

Evet, RedHat Dünyasında hala önemli olan çoğu eski çekirdek, 64bit ext4 için henüz kararlı bir destek içermiyor. Afaik Ubuntu, birçok linux gurusu'nun söylediği şeylerle gider, ext4 btrfs ile değiştirilecektir - ext4 şimdi btrfs özelliklerine yakın olsa da, btrfs'nin tasarımda daha zarif ve belki de hatalara daha az eğilimli olduğuna inanıyorum.
anx

2
btrfs, üretime hazır değildir ve Oracle arka brülöre geliştirdiği için üretime hazır olmayabilir. Kişisel görüşüm, bu düzeyde bir dosya sistemi karmaşıklığına ihtiyacınız varsa, gerçek veri depolama ihtiyaçlarınız için ZFS kullanımıyla birlikte küçük bir 8GB XFS kökü kullanın.
Diablo-D3

0

Son zamanlarda, 16.04 Ubuntu ile ilk kurulduktan sonra güncellenen bir Ubuntu 18.04 ile başıma geldi ... Depolama dizisi (/ dev / sdb) başlangıçta iki 14 TB bölüme ayrılmıştı ve bu da büyütmek istiyor. sorunun ilk kısmı 28 TB’dir.

Yeni bir resize2fs sürümü indirmeye ihtiyacım olmadı çünkü çok yeni olmuştu.

# resize2fs 
resize2fs 1.44.1 (24-Mar-2018)

Tek sorun, 32 bit olarak biçimlendirilmiş 64-bit bölüm 1'i dönüştürmekti ... Okuyucuyu tune2fs belgelerine (Anx'in önerdiği gibi) başvurmaya davet etmek yerine, gerçek bir örnek öneriyorum!

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

Son olarak, disk bölümünü büyütüyoruz!

# 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).
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.