ขยายพาร์ติชันล่าสุดโดยอัตโนมัติเพื่อใช้พื้นที่ที่ไม่ได้ปันส่วนทั้งหมดโดยใช้การแบ่งส่วนในโหมดแบทช์


20

เรื่องสั้นสั้นฉันต้องดำเนินการทั้งหมดนี้โดยอัตโนมัติเมื่อบูต (ระบบฝังตัว)

วิศวกรของเราจะส่งภาพไปยังอุปกรณ์การผลิต รูปภาพเหล่านี้จะมีตารางพาร์ติชันเล็ก ๆ ในการบู๊ตฉันต้องขยายพาร์ติชั่นสุดท้ายโดยอัตโนมัติ (# 3) เพื่อใช้พื้นที่ทั้งหมดบนดิสก์

นี่คือสิ่งที่ฉันได้รับเมื่อฉันดูพื้นที่ว่างบนดิสก์ของฉัน

> 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

ฉันจำเป็นต้องขยายพาร์ติชัน 3 ด้วยจำนวน N (30.5GB)

ฉันจะทำขั้นตอนนี้โดยอัตโนมัติโดยไม่แจ้งได้อย่างไร สิ่งนี้ต้องทำงานกับขนาดพื้นที่ว่างที่มีอยู่หลังจากพาร์ติชันที่ 3


อย่าคาดหวังว่าจะได้รับสคริปต์พร้อมใช้งานโดยไม่ต้องลอง! คุณสามารถแสดงให้เราเห็นว่าคุณลองทำอะไรจนถึงตอนนี้ อีกสิ่งหนึ่งที่พาร์ติชันที่คุณกำลังปรับขนาดนั้นจะต้องไม่ถูกเมาท์ระหว่างการดำเนินการ ....
Luciano Andress Martini

ฉันลองresizepartสั่งแล้วใช้งานได้ แต่มันต้องใช้ขนาดที่แน่นอน ฉันต้องการมันเป็นแบบไดนามิก
Paul Knopf

resize2fsอาจเป็นสิ่งที่ฉันกำลังมองหา linux.die.net/man/8/resize2fs
Paul Knopf

คำตอบ:


22

ในรุ่นปัจจุบันของparted, resizepartควรจะทำงานสำหรับพาร์ติชัน ( partedเข้าใจ100%หรือสิ่งที่ต้องการ-1sหลังยังมีความต้องการ--ที่จะหยุดการแยกตัวเลือกใน cmdline) ที่ ในการกำหนดค่าที่แน่นอนคุณสามารถใช้,unit s หลังจากนั้นมาสำหรับระบบไฟล์print freeresize2fs


เวอร์ชันเก่าpartedมีresizeคำสั่งที่จะปรับขนาดทั้งพาร์ติชันและระบบไฟล์ในครั้งเดียวมันยังทำงานvfatได้

ในการดัดแปลง Kere ereader ฉันใช้สิ่งนี้เพื่อปรับขนาดพาร์ติชั่นที่ 3 ของหน่วยความจำภายในให้สูงสุด: (มันสุ่มถือว่ามันไม่มีพาร์ติชั่นที่ 4 และตารางและสิ่งต่างๆ msdos)

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

ดังนั้นคุณสามารถรับค่าจาก/sys/block/.../ถ้าเคอร์เนลรองรับ แต่partedออกresizeคำสั่งเพื่อให้คุณต้องทำสองขั้นตอนในขณะนี้resizepartที่จะเติบโตพาร์ทิชันและเครื่องมืออะไรก็ตามที่ระบบแฟ้มของคุณมีการปลูกว่าเหมือนสำหรับresize2fsext*


นี่คือสิ่งที่ฉันกำลังมองหา ขอบคุณสำหรับความช่วยเหลือของคุณ!
Paul Knopf

คำถามข้างเคียงอะไรคือ 8 ไบต์ที่ส่วนท้าย?
Paul Knopf

หลีกเลี่ยงการปรับขนาดด้วยเซกเตอร์เดียว ... คุณต้องเปลี่ยนเป็น -40 หรือบางอย่าง (ส่วนหัวสำรอง GPT ที่ท้ายดิสก์)
frostschutz

ไม่partedรองรับการขยายอัตโนมัติจากบรรทัดคำสั่ง? เพราะมันไม่สนับสนุนการโต้ตอบ หากเรียกใช้การโต้ตอบก็จะถามว่าคุณต้องการที่จะแก้ไขตารางพาร์ทิชัน GPT เพื่อให้ตรงกับขนาดของดิสก์ (ชนิดfix) resizepart 3 -1และจากนั้นคุณสามารถเรียกใช้ ฉันพยายามหาวิธีที่จะทำมันจากบรรทัดคำสั่ง
ฮาร์วีย์

ไม่เร็วนัก: คำสั่งปรับขนาดได้ถูกลบออกในส่วนที่ 3.0 ลอง sfdisk หรือ gparted
GregD

16

ไม่สามารถแยกสคริปต์ได้อย่างถูกต้อง (มันขอการยืนยันเนื่องจากพาร์ทิชันถูกเมาท์และตรงข้ามกับคำตอบอื่น ๆ ที่ฉันพบว่าไม่เข้าใจ-1sหรือ100%) ฉันเพิ่งพบเครื่องมือคำสั่งที่ทำสิ่งนี้

การใช้งานง่าย: growpart /dev/sda 3(และจากนั้นresize2fs /dev/sda3หรือคำสั่งอื่นที่เหมาะสมสำหรับประเภทระบบไฟล์ที่ใช้)

ใน Debian และ Ubuntu มันจะถูกบรรจุเป็นเมฆแขก utils


1
นี่เป็นวิธีที่สะดวกที่สุดที่ฉันจะหาได้ในตอนนี้ มันทำงานได้อย่างยอดเยี่ยม
SebiF

นี่เป็นวิธีแก้ปัญหาสำหรับฉัน - แยกไม่ชอบ ext4 เป็นระบบไฟล์และดูเหมือนจะไม่มีทางหลีกเลี่ยงที่จะพยายามปรับขนาดระบบไฟล์ ...
Antti Haapala

ไม่ทำงานกับ Ubuntu 18.04
DreamFlasher

@DreamFlasher ฉันไม่สามารถบอกได้ว่าทำไมมันถึงไม่เหมาะกับคุณ เท่าที่ฉันเห็นคุณสามารถติดตั้งแพ็คเกจ cloud-guest-utils และเนื่องจากนี่เป็นฟังก์ชั่นเดียวที่มีให้โดย growpart มันควรจะทำงานจนกว่าจะมีข้อผิดพลาดมันถูกใช้อย่างไม่ถูกต้องหรือสิ่งที่เกินการควบคุม โปรดสังเกตว่าอาร์กิวเมนต์สุดท้าย (3 ในตัวอย่าง) คือพาร์ติชันที่จะถูกปรับขนาดนับจาก 1 และพื้นที่ว่างที่เพียงพอจะต้องมีอยู่หลังจากพาร์ติชันเพื่อปรับขนาดด้วยวิธีนี้
Ivo Smits

7

วิธีที่ถูกต้องในการทำเช่นนี้คือใช้ความจริงที่แยกออกมาว่ามีความคิดเป็นเปอร์เซ็นต์ ดังนั้น

parted /dev/sda resize 3 100%

1
ล้าสมัยไม่ทำงานกับ Ubuntu 18.04 และใหม่กว่า
DreamFlasher

คำสั่งปรับขนาดเล็กน้อยได้ไปกับรุ่นแยกส่วน 3 ตอนนี้คุณต้องใช้คำสั่ง resizepart แล้วปรับขนาดระบบไฟล์หรือ PV พื้นฐานแยกต่างหากถ้านั่นคือสิ่งที่คุณกำลังใช้ สำหรับ ext4 คำสั่งคือ resize2fs หรือสำหรับ XFS มันคือ xfs_growfs โดยปกติจะทำทั้งสองอย่างเมื่อติดตั้งระบบไฟล์และอาร์กิวเมนต์เป็นจุดต่อในทั้งสองกรณี
Jonathan Buzzard

0

ใน Ubuntu 18.04 ฉันสามารถปรับขนาดเพื่อเติมช่องว่างที่ไม่ได้ปันส่วนในสคริปต์ด้วยต่อไปนี้:

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

อาจไม่จำเป็นต้องต่อเชื่อมก่อนปรับขนาด ฉันทำมันเพื่อระงับแบบสอบถามจาก resize2fs สำหรับการป้อนข้อมูลของผู้ใช้

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