ฉันจะปรับขนาดพาร์ติชัน 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) เป็นรุ่นที่ 1 ที่สามารถอัพเกรดขนาดที่อยู่ 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 ทั่วไปใช้เวลาโหลด IO & CPU สูง 4 นาที

ขั้นตอนที่ 4: ปรับขนาดระบบไฟล์

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

หากคุณไม่ผ่านขนาดบนบรรทัดคำสั่งresize2fsจะถือว่า "ขยายไปยังพื้นที่ทั้งหมดที่มี" - นี่คือสิ่งที่คุณต้องการ -pธงเปิดใช้งานแถบความคืบหน้า - แต่ผู้ที่จะแสดงเฉพาะหลังจากขั้นตอนเริ่มต้นบางอย่าง

บน HDD RAID ทั่วไปใช้เวลาโหลด IO & CPU สูง 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 ในตัวติดตั้งของพวกเขาเมื่อแบ่งพาร์ติชันระบบไฟล์มากกว่า 16TB และตอนนี้ชอบ XFS outright เป็นระบบไฟล์เริ่มต้น
Diablo-D3

ใช่เมล็ดที่แก่กว่าส่วนใหญ่ยังคงมีความสำคัญใน RedHat World ยังไม่มีการสนับสนุน 64 บิต ext4 ที่เสถียร Afaik Ubuntu ไปพร้อมกับสิ่งที่ผู้เชี่ยวชาญหลายคนบอกว่า linux, ext4 จะถูกแทนที่ด้วย btrfs - แม้ว่า ext4 นั้นใกล้เคียงกับ btrfs ในฟีเจอร์ในตอนนี้ฉันเชื่อว่า btrfs นั้นมีความสง่างามในการออกแบบมากขึ้น
anx

2
btrfs ยังไม่พร้อมสำหรับการผลิตและอาจไม่พร้อมสำหรับการผลิตเนื่องจาก Oracle ได้นำการพัฒนามาใช้ใน back back ความคิดเห็นส่วนตัวของฉันคือถ้าคุณต้องการระดับความซับซ้อนของระบบไฟล์นั้นให้ใช้ราก XFS ขนาดจิ๋ว 8GB รวมกับการใช้ ZFS สำหรับความต้องการจัดเก็บข้อมูลจริงของคุณ
Diablo-D3

0

เพิ่งเกิดขึ้นกับฉันเมื่อเร็ว ๆ นี้ด้วย Ubuntu 18.04 ที่ได้รับการอัปเดตหลังจากติดตั้งครั้งแรกด้วย Ubuntu 16.04 ... อาร์เรย์การจัดเก็บ (/ dev / sdb) ได้รับการแบ่งพาร์ติชันเป็นพาร์ติชัน 14 TB สองพาร์ติชัน พาร์ติชันแรกที่ 28 TB ที่ปัญหาเกิดขึ้น

ฉันไม่จำเป็นต้องดาวน์โหลด 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).
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.