Tự động mở rộng phân vùng cuối cùng để sử dụng tất cả không gian chưa phân bổ, sử dụng chia tay trong chế độ hàng loạt


19

Tóm lại, tôi cần thực hiện tất cả điều này một cách tự động khi khởi động (hệ thống nhúng).

Các kỹ sư của chúng tôi sẽ flash hình ảnh đến các thiết bị sản xuất. Những hình ảnh này sẽ chứa một bảng phân vùng nhỏ. Khi khởi động, tôi cần tự động mở rộng phân vùng cuối cùng (# 3) để sử dụng tất cả không gian có sẵn trên đĩa.

Đây là những gì tôi nhận được khi nhìn vào không gian trống trên đĩa của mình.

> parted /dev/sda print free
Model: Lexar JumpDrive (scsi)
Disk /dev/sda: 32.0GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
        17.4kB  1049kB  1031kB  Free Space
 1      1049kB  25.3MB  24.2MB  fat16        primary  legacy_boot
        25.3MB  26.2MB  922kB   Free Space
 2      26.2MB  475MB   449MB   ext4         primary
 3      475MB   1549MB  1074MB  ext4         primary
        1549MB  32.0GB  30.5GB  Free Space

Tôi cần mở rộng phân vùng 3 theo N (30,5GB) số byte

Làm thế nào để tôi thực hiện bước này tự động, không có dấu nhắc? Điều này cần phải làm việc với một kích thước không gian động có sẵn sau phân vùng thứ 3.


Đừng mong nhận được một kịch bản sẵn sàng để đi, mà không cần thử! Vì vậy, bạn có thể cho chúng tôi thấy những gì bạn đã cố gắng cho đến bây giờ? Một điều nữa phân vùng mà bạn đang thay đổi kích thước không được gắn trong quá trình hoạt động ....
Luciano Andress Martini

Tôi đã thử resizepartlệnh, và nó hoạt động, nhưng nó đòi hỏi một kích thước chính xác. Tôi cần nó để năng động.
Paul Knopf

resize2fscó thể là những gì tôi đang tìm kiếm. linux.die.net/man/8/resize2fs
Paul Knopf

Câu trả lời:


21

Trong các phiên bản hiện tại của parted, resizepartnên hoạt động cho phân vùng ( partedhiểu 100%hoặc những thứ như -1s, sau này cũng cần --dừng các tùy chọn phân tích cú pháp trên cmdline). Để xác định giá trị chính xác bạn có thể sử dụng unit s, print free. resize2fsđến sau cho hệ thống tập tin.


Các phiên bản cũ của partedmột resizelệnh sẽ thay đổi kích thước cả phân vùng và hệ thống tệp trong một lần, thậm chí nó còn hoạt động vfat.

Trong một sửa đổi erbo Kobo, tôi đã sử dụng điều này để thay đổi kích thước phân vùng bộ nhớ trong thứ 3 đến mức tối đa: (nó giả định một cách mù quáng không có phân vùng thứ 4 và bảng msdos và mọi thứ)

start=$(cat /sys/block/mmcblk0/mmcblk0p3/start)
end=$(($start+$(cat /sys/block/mmcblk0/mmcblk0p3/size)))
newend=$(($(cat /sys/block/mmcblk0/size)-8))

if [ "$newend" -gt "$end" ]
then
    parted -s /dev/mmcblk0 unit s resize 3 $start $newend
fi

Vì vậy, bạn cũng có thể có được các giá trị từ /sys/block/.../nếu kernel hỗ trợ nó. Nhưng partedđã loại bỏ resizelệnh để bạn phải thực hiện hai bước bây giờ, resizepartđể phát triển phân vùng và bất kỳ công cụ nào mà hệ thống tệp của bạn cung cấp để phát triển điều đó, như resize2fscho ext*.


Điều này thật đúng với gì mà tôi đã tìm kiếm. Cảm ơn bạn đã giúp đỡ!
Paul Knopf

Câu hỏi phụ, 8 byte ở cuối là gì?
Paul Knopf

Tránh thay đổi kích thước theo một khu vực duy nhất ... bạn phải thay đổi thành -40 hoặc một cái gì đó (tiêu đề sao lưu GPT ở cuối đĩa).
frostschutz

Không partedhỗ trợ mở rộng tự động từ dòng lệnh? Bởi vì, nó không hỗ trợ nó tương tác. Nếu chạy tương tác, nó sẽ hỏi bạn có muốn sửa bảng phân vùng GPT để khớp với kích thước của đĩa (loại fix) không, và sau đó bạn có thể chạy resizepart 3 -1. Tôi đã cố gắng tìm ra cách để làm cho nó làm điều đó từ dòng lệnh.
Harvey

Không quá nhanh: Lệnh thay đổi kích thước đã bị xóa trong parted 3.0. Hãy thử sfdisk hoặc gparted.
GregD

15

Không thể chia tay tập lệnh đúng cách (nó yêu cầu xác nhận vì phân vùng được gắn kết và trái với các câu trả lời khác mà tôi thấy không hiểu -1shoặc 100%), tôi chỉ tìm thấy công cụ growpart thực hiện chính xác điều này.

Cách sử dụng rất đơn giản: growpart /dev/sda 3(và sau đó resize2fs /dev/sda3, hoặc một lệnh thích hợp khác cho loại hệ thống tệp được sử dụng).

Trong Debian và Ubuntu, nó được đóng gói dưới dạng các ứng dụng khách trên đám mây .


Đây là cách thuận tiện nhất tôi có thể tìm thấy cho điều này ngay bây giờ. Nó làm việc tuyệt vời.
SebiF

Đây là giải pháp cho tôi - chia tay không giống như ext4 với tư cách là hệ thống tệp và dường như không có cách nào để tránh việc cố gắng thay đổi kích thước hệ thống tệp ...
Antti Haapala

không hoạt động cho Ubuntu 18.04
DreamFlasher

@DreamFlasher Tôi không thể biết tại sao nó không hiệu quả với bạn. Theo như tôi có thể thấy, bạn chỉ có thể cài đặt gói cloud-guest-utils và vì đây là chức năng duy nhất được cung cấp bởi growpart nên nó hoạt động trừ khi có lỗi, nó được sử dụng không chính xác hoặc có gì đó không kiểm soát được. Lưu ý rằng đối số cuối cùng (3 trong ví dụ) là phân vùng được thay đổi kích thước, đếm từ 1 và cần có đủ không gian ngay sau phân vùng để có thể thay đổi kích thước theo cách này.
Ivo Smits

7

Cách đúng đắn để làm điều này là sử dụng thực tế là chia tay có khái niệm tỷ lệ phần trăm. Vì thế

parted /dev/sda resize 3 100%

1
lỗi thời, không hoạt động với Ubuntu 18.04 trở lên
DreamFlasher

Hơi thay đổi lệnh thay đổi kích thước đã đi với phiên bản chia tay 3, bây giờ bạn phải sử dụng lệnh resizepart và sau đó thay đổi kích thước riêng hệ thống tệp bên dưới hoặc PV nếu đó là những gì bạn đang sử dụng. Đối với ext4, lệnh là resize2fs hoặc đối với XFS, đó là xfs_growfs. Cả hai thường được thực hiện khi hệ thống tệp được gắn kết và đối số là điểm gắn kết trong cả hai trường hợp.
Jonathan Buzzard

0

Trong Ubuntu 18.04, tôi có thể thay đổi kích thước để lấp đầy không gian chưa phân bổ trong một tập lệnh với các mục sau:

sudo parted -s /dev/sdb "resizepart 2 -1" quit
sudo mount -av
sudo umount /dev/sdb2
sudo mount /dev/sdb2 /mnt
sudo resize2fs /dev/sdb2

Nó có thể không cần thiết để gắn kết trước khi thay đổi kích thước. Tôi đã làm điều đó để chặn một truy vấn từ resize2fs cho đầu vào của người dùng.

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.