Làm cách nào để thay đổi kích thước phân vùng ext4 vượt quá giới hạn 16TB?


26

Khi cố gắng thay đổi kích thước và Phân vùng ext4 cũ được tạo mà không có cờ 64 bit, resize2fs 1.42 sẽ không thành công nếu kích thước mới vượt quá 16TiB.

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

Tôi không muốn sao chép các tập tin vào một phương tiện bên ngoài. Tôi cũng không muốn mất rủi ro mất dữ liệu. Làm thế nào tôi có thể thay đổi kích thước âm lượng một cách an toàn?

Câu trả lời:


46

Bạn đang cố gắng thay đổi kích thước một hệ thống tập tin đã được tạo trước khi -O 64bittùy chọn trở thành mặc định. Có thể nâng cấp hệ thống tập tin mở rộng của bạn lên địa chỉ 64 bit, cho phép nó mở rộng đáng kể (1024 PiB thay vì 16 TiB).

Giả sử thiết bị mục tiêu của bạn được gọi /dev/mapper/target-device, đây là những gì bạn cần làm:

Điều kiện tiên quyết

  1. Kích thước âm lượng này phải được hỗ trợ bởi RAID. Lỗi đĩa thông thường sẽ gây hại khác.
  2. Tuy nhiên, RAID không phải là một bản sao lưu . Bạn phải có giá trị của bạn được lưu trữ ở nơi khác là tốt.
  3. Đầu tiên thay đổi kích thước và xác minh tất cả các khối lượng xung quanh (bảng phân vùng, mã hóa, lvm).
  4. Sau khi thay đổi cấu hình RAID phần cứng, linux có thể hoặc không ngay lập tức xác nhận kích thước tối đa mới. Kiểm tra $ cat /proc/partitionsvà khởi động lại nếu cần thiết.

Sử dụng kernel ổn định gần đây và e2fspross

  1. Đảm bảo (kiểm tra uname -r) bạn đang chạy kernel có thể xử lý đúng hệ thống tệp ext4 64 bit - bạn muốn sử dụng 4.4.xkernel hoặc mới hơn (mặc định Ubuntu 16 trở lên).
  2. Có được e2fspross của ít nhất phiên bản 1.43

    • Ubuntu 16.04(2016-04-21) đã được phát hành cùng với e2fsprogs 1.42.12(2014-08-25)
    • e2fsprogs 1.43 (2016-05-17) là phiên bản đầu tiên có khả năng nâng cấp kích thước địa chỉ extfs.
    • Ubuntu 18.04(2018-04-26) tàu có e2fsprogs 1.44.x(tốt!)

Nếu bạn đang bật 16.04và không thể nâng cấp lên bản phát hành Ubuntu mới hơn, bạn sẽ phải bật hỗ trợ gói nguồn và cài đặt phiên bản mới hơn theo cách thủ công:

$ 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

Thay đổi kích thước

Bước 1: Ghép đúng hệ thống tập tin

$ sudo umount /dev/mapper/target-device

Bước 2: Kiểm tra lỗi hệ thống tập tin

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

Bước 3: Kích hoạt hỗ trợ 64 bit trong hệ thống tập tin

Tham khảo ý kiến man tune2fsman resize2fs- bạn có thể thay đổi một số cờ hệ thống tập tin.

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

Trên một RAID HDD thông thường, việc này mất 4 phút tải IO & CPU cao.

Bước 4: Thay đổi kích thước hệ thống tập tin

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

Nếu bạn không vượt qua kích thước trên dòng lệnh, resize2fs giả định "phát triển đến tất cả không gian có sẵn" - đây thường chính xác là những gì bạn muốn. Các -pcờ kích hoạt thanh tiến - nhưng những người chỉ hiển thị sau một số bước ban đầu.

Trên một RAID HDD thông thường, việc này mất 4 phút tải IO & CPU cao.

Xác minh lại

Kiểm tra lại hệ thống tập tin

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

e2fsck của các phiên bản mới hơn có thể đề xuất sửa lỗi dấu thời gian hoặc phạm vi cây mà các phiên bản trước xử lý không tốt. Đây không phải là dấu hiệu của bất kỳ vấn đề nghiêm trọng nào và bạn có thể chọn khắc phục ngay bây giờ hoặc sau này.

Nếu lỗi xảy ra, đừng không hoảng sợ và làm không cố gắng để viết thư cho khối lượng; tham khảo ý kiến ​​một người có kiến ​​thức sâu rộng về hệ thống tập tin, vì các hoạt động tiếp theo có thể sẽ phá hủy dữ liệu!

Nếu không có lỗi xảy ra, hãy nhắc lại thiết bị:

$ sudo mount /dev/mapper/target-device

Sự thành công!

Bạn sẽ không cần bất kỳ phiên bản e2fsposs không phải Ubuntu nào để tiếp tục hoạt động của hệ thống tệp được nâng cấp - hạt nhân hỗ trợ những thứ này khá lâu rồi. Nó chỉ cần thiết để bắt đầu nâng cấp.


Để tham khảo, có một thông báo lỗi tương tự mke2fs sẽ in nếu được yêu cầu tạo một thiết bị khổng lồ với các tùy chọn không phù hợp:

$ 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
Chính xác. Tôi muốn thêm Redhat (như RHEL, Centos, v.v.) đã từng thích XFS hơn Ext4 trong trình cài đặt của họ khi phân vùng hệ thống tệp trên 16TB và bây giờ chỉ thích XFS hoàn toàn làm hệ thống tệp mặc định.
Diablo-D3

Có, hầu hết các hạt nhân cũ vẫn còn có ý nghĩa trong Thế giới RedHat chưa có hỗ trợ ổn định cho ext4 64 bit. Afaik Ubuntu phù hợp với những gì nhiều chuyên gia linux nói, ext4 sẽ được thay thế bởi btrfs - mặc dù ext4 gần với btrfs trong các tính năng, tôi tin rằng btrfs có thiết kế thanh lịch hơn và thậm chí có thể ít bị lỗi hơn.
lắng

2
btrfs chưa sẵn sàng để sản xuất và có thể không bao giờ sẵn sàng để sản xuất, vì Oracle đã đưa sự phát triển của nó lên ổ ghi phía sau. Ý kiến ​​cá nhân của tôi là nếu bạn cần mức độ phức tạp của hệ thống tệp đó, hãy sử dụng một gốc XFS 8GB nhỏ xíu kết hợp với sử dụng ZFS cho nhu cầu lưu trữ dữ liệu thực tế của bạn.
Diablo-D3

0

Nó xảy ra với tôi gần đây, với Ubuntu 18.04 đã được cập nhật sau khi được cài đặt ban đầu với Ubuntu 16.04 ... Mảng lưu trữ (/ dev / sdb) ban đầu được phân vùng thành hai phân vùng 14 TB và đó là do muốn phóng to phân vùng đầu tiên đến 28 TB mà sự cố xảy ra.

Tôi không cần tải xuống phiên bản mới của resize2fs vì nó rất gần đây.

# resize2fs 
resize2fs 1.44.1 (24-Mar-2018)

Vấn đề duy nhất là chuyển đổi phân vùng 64 bit 1 đã được định dạng thành 32 bit ... Thay vì mời người đọc tham khảo tài liệu của Tune2fs (như Anx gợi ý), tôi đề xuất một ví dụ thực tế!

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

Cuối cùng, chúng tôi phóng to phân vùng đĩa!

# 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).
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.