ฉันจะเพิ่มขนาดพาร์ติชันรูทของระบบตอนรันไทม์ได้อย่างไร?
ฉันมีพาร์ติชั่นที่ไม่ได้ถูกจัดสรรหลังรูทพาร์ติชั่น (ซึ่งก็คือ ext4) ฉันจะเพิ่มพื้นที่ที่ไม่ได้ปันส่วนให้กับพื้นที่ที่จัดสรรให้กับพาร์ติชั่นรูทโดยไม่ต้องปิดเซิร์ฟเวอร์ได้อย่างไร?
ฉันจะเพิ่มขนาดพาร์ติชันรูทของระบบตอนรันไทม์ได้อย่างไร?
ฉันมีพาร์ติชั่นที่ไม่ได้ถูกจัดสรรหลังรูทพาร์ติชั่น (ซึ่งก็คือ ext4) ฉันจะเพิ่มพื้นที่ที่ไม่ได้ปันส่วนให้กับพื้นที่ที่จัดสรรให้กับพาร์ติชั่นรูทโดยไม่ต้องปิดเซิร์ฟเวอร์ได้อย่างไร?
คำตอบ:
GUI (Ubuntu 14.04 ขึ้นไป) : GParted v0.17 และใหม่กว่าเป็น GUI ที่ดีสำหรับสิ่งนี้ (เวอร์ชั่นที่เก่ากว่าจะปฏิเสธที่จะปรับขนาดพาร์ติชันที่เมาท์)
บรรทัดคำสั่ง (ทุกรุ่นของ Ubuntu): มีสามขั้นตอนดังนี้
ขั้นตอนที่ 1 ต้องปรับขนาดพาร์ติชันก่อน หากคุณใช้ LVM เป็นเรื่องง่ายและคุณอาจรู้วิธีดำเนินการต่อไป หากคุณใช้คลาสสิกพาร์ทิชันมันซับซ้อนกว่าเล็กน้อยและอาจต้องรีบูต (แม้ว่าคุณจะไม่ต้องบูตระบบอื่นหรือซีดีสด)
นี่คือวิธีที่ฉันทำ: ใช้fdisk
เพื่อลบพาร์ติชันก่อน (แนวคิดคือข้อมูลบนดิสก์จะถูกเก็บรักษาไว้) จากนั้นสร้างใหม่อย่างระมัดระวังด้วยขนาดที่ใหญ่กว่าในตำแหน่งเดียวกัน
ตัวอย่าง:
$ sudo fdisk /dev/sda
Command (m for help): p
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 9437183 4717568 83 Linux
Command (m for help): d
Selected partition 1
Command (m for help): p
Device Boot Start End Blocks Id System
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4, default 1): 1
First sector (2048-10485759, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759):
Using default value 10485759
Command (m for help): p
Device Boot Start End Blocks Id System
/dev/sda1 2048 10485759 5241856 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
อีกครั้งเป็นสิ่งสำคัญที่พาร์ติชันใหม่เริ่มต้นที่บล็อกเดียวกันกับเก่า รหัสควรตรงกัน (83 สำหรับระบบ Linux) เตรียมพร้อมที่จะสูญเสียข้อมูลทั้งหมดของคุณในการพิมพ์ที่น้อยที่สุด
เป็นทางด้านความปลอดภัยที่คุณอาจเรียกคืนธงบูต (ซึ่งเป็นไปตามวิกิพีเดียยังคงจำเป็นต้องใช้ในคอมพิวเตอร์บางเครื่อง) a
โดยการกด
ดูในส่วนความคิดเห็นว่าจะทำอย่างไรถ้าพาร์ติชั่นสว็อปของคุณอยู่ระหว่างทาง
โดยตอนนี้มันควรจะชัดเจนว่าทำไมคนแนะนำให้ใช้ซีดีสด ;-)
ขั้นตอนที่ 2
ตามที่fdisk
แจ้งเตือนคุณอย่างเป็นประโยชน์คุณต้องโหลดตารางพาร์ติชันใหม่ก่อนดำเนินการต่อ วิธีที่ปลอดภัยที่สุดคือการรีบู๊ต แต่คุณยังสามารถใช้partprobe
หรือ(ข้อมูลเพิ่มเติม)kpartx
ขั้นตอนที่ 3
เมื่อปรับขนาดพาร์ติชันและตารางพาร์ติชันจะโหลดใหม่มันเป็นเรื่องง่ายที่จะรันresize2fs
บนระบบไฟล์และคุณสามารถทำได้แม้ว่าจะติดตั้งเป็นพาร์ติชันรูทก็ตาม
ตัวอย่าง:
$ sudo resize2fs /dev/sda1
fdisk
กล่าวไว้partprobe
หรือkpartx
อาจทำงานแทนการรีบูต ดูคำถามนี้ด้วย แม้ว่าคุณจะเริ่มระบบใหม่ แต่วิธีการแก้ปัญหายังคงดีกว่าหากใช้แผ่นซีดีจริงเมื่อถึงเวลาที่เครื่องหยุดทำงานซึ่งการเริ่มระบบแบบง่ายอาจน้อยกว่า 10 วินาทีสำหรับเครื่องเสมือน นอกจากนี้ยังเร็วขึ้นในเวลาผู้ปฏิบัติงานซึ่งเป็นเหตุผลที่ฉันมักจะใช้วิธีนี้ด้วยตนเอง :)
free -h
) ให้ปิดการใช้งาน swap ( swapoff /dev/sda2
) เปลี่ยนตารางพาร์ติชัน (รวมถึงการลบและสร้างพาร์ทิชัน swap) และ 1) รีบูตหรือ 2) โหลดตารางพาร์ติชันswapon
อีกครั้ง (หากหน่วยความจำแน่นเกินไปที่จะปิดการใช้งานการสับเปลี่ยนชั่วคราวคุณยังสามารถสร้างและเปิดใช้งานพาร์ทิชัน swap ใหม่/dev/sda3
) ( ) จากนั้น swapoff sda2
แต่คุณจะต้องอัปเดต/etc/fstab
ชื่ออุปกรณ์ swap ใหม่)
เป็นไปได้ที่จะทำการปรับขนาดออนไลน์ของระบบไฟล์ ext4 แม้ว่าจะเป็นพาร์ติชันรูทของคุณก็ตาม ใช้resize2fs
คำสั่ง
sudo resize2fs /dev/sda1
แก้ไข: ไม่อนุญาตให้มีการลดขนาดแบบออนไลน์:
root@brunojcm-htpc:/home# resize2fs /dev/sda5 2654693
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/sda5 is mounted on /; on-line resizing required
resize2fs: On-line shrinking not supported
man resize2fs
: The resize2fs program does not manipulate the size of partitions. If you wish to enlarge a filesystem, you must make sure you can expand the size of the underlying partition first. This can be done using fdisk(8) by deleting the partition and recreating it with a larger size or using lvextend(8),if you're using the logical volume manager lvm(8).
คำถามนี้เป็นคำถามเกี่ยวกับการปรับขนาดพาร์ทิชันไม่ระบบแฟ้ม ความแตกต่างนั้นบอบบาง แต่สำคัญมาก
The resize2fs program will resize ext2, ext3, or ext4 file systems. It can be used to enlarge or shrink an unmounted file system located on device. If the filesystem is mounted, it can be used to expand the size of the mounted filesystem, assuming the kernel supports on-line resizing. (As of this writing, the Linux 2.6 kernel supports on-line resize for filesystems mounted using ext3 and ext4.).
fdisk
เมื่อgrowpart
จะทำสิ่งนี้ได้อย่างง่ายดายสำหรับคุณ
ทางออกที่ง่ายขึ้น - ใช้growpart <device> <partition>
:
growpart /dev/xvda 1 # Grows the partition; note the space
resize2fs /dev/xvda1 # Grows the filesystem
เช่นเคยสำรองตารางพาร์ติชันของคุณ ( sfdisk -d /dev/xvda > partition_bak.dmp
) ในกรณี
sfdisk: /dev/nvme0n1p5: does not contain a recognized partition table
(โดยใช้บูตคู่กับหน้าต่าง)
gparted
สำหรับมัน
apt-get install cloud-utils
/dev/nvme0n1
p5 คือพาร์ติชัน 5 บนดิสก์นี้ เปรียบเทียบกับแผ่นดิสก์ BSD แบบดั้งเดิมพวกเขาใช้รูปแบบการกำหนดหมายเลขที่คล้ายกัน
ใช่คุณสามารถย่อ / ย้าย / ขยายพาร์ติชันรูทแบบออนไลน์โดยไม่ต้องบูตเครื่องใหม่ (หรือ livecd หรือ usbkey): ดูคำตอบนี้ มันเขียนได้ดีมากและง่ายต่อการติดตามแม้ว่าจะค่อนข้างยาวและเสี่ยงเล็กน้อย ดังนั้นหากคุณต้องการขยายพาร์ติชัน ext4 ของคุณเท่านั้นคุณสามารถยึดติดกับresize2fs
โซลูชันการทำงานทั่วไป
โซลูชันทั่วไปที่ฉันใช้จะทำงานกับโซลูชันเฉพาะหรือ VPS ทุกประเภท
TLDR; วิธีการแก้ปัญหานี้เกี่ยวข้องกับpivot_root
เพื่อtmpfs
ให้คุณสามารถumount
แบ่งพาร์ติชันของคุณอย่างปลอดภัยและอยู่กับมันได้อย่างปลอดภัย เมื่อเสร็จแล้วคุณจะpivot_root
กลับไปที่พาร์ติชันรูทใหม่ของคุณ
สิ่งนี้ช่วยให้การจัดการใด ๆ บนระบบไฟล์รูทค่อนข้างมาก (ย้ายเปลี่ยนระบบไฟล์เปลี่ยนอุปกรณ์ทางกายภาพ ... )
ไม่จำเป็นต้องรีบูตในกระบวนการและสิ่งนี้ทำให้สามารถข้ามข้อ จำกัดของการresize2fs
ไม่สามารถย่อขนาด ext4
พาร์ติชันได้
ฉันใช้สิ่งนี้เป็นการส่วนตัวและใช้งานได้ดีกับระบบ debian เช่นกันดังนั้นจึงควรใช้กับ Ubuntu ฉันประหลาดใจมากที่ไม่เห็นโซลูชันในเชิงลึกนี้เชื่อมโยงกับคำถามมากมายในเว็บไซต์ stackexchange ที่เกี่ยวข้องกับปัญหาเดียวกัน
หมายเหตุ:แน่นอนถ้าคุณต้องการขยายพาร์ติชันของคุณความเรียบง่ายresize2fs
จะเพียงพอตามที่ระบุไว้ในหลาย ๆ ที่และในคำตอบอื่น ๆ ที่นี่
คุณสามารถใช้GParted ได้ - ตราบใดที่พาร์ทิชันที่คุณกำลังปรับขนาดไม่ใช่อันที่คุณบูท - มิฉะนั้นฉันขอแนะนำตัวเลือกซีดีสดค่อนข้างง่ายสำหรับมือใหม่
GPartedทำตามขั้นตอนทั้งหมด - เพียงแค่อิงตาม GUI ด้านหน้า
เพิ่งปรับขนาดพาร์ติชันรูต ext4 บนระบบที่ใช้งานจริงในขณะที่รูทเมาต์เสร็จแล้ว
[root@habib i686]# resize2fs /dev/vg_habib/lv_root
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/vg_habib/lv_root is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 10
Performing an on-line resize of /dev/vg_habib/lv_root to 38427648 (4k) blocks.
The filesystem on /dev/vg_habib/lv_root is now 38427648 blocks long.
[root@habib i686]#
ฉันต้องการสร้างส่วนขยายตามคำตอบของ @ SørenLøvborg: ขยายพาร์ติชั่นด้วยพาร์ทิชัน swap ปัจจุบัน
ก่อนอื่นเค้าโครงของดิสก์หลังจากขยายมัน:
$sudo parted /dev/sda 'unit s print' free
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 14336000s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
63s 2047s 1985s Free Space
1 2048s 10485759s 10483712s primary ext4 boot
10485760s 10487805s 2046s Free Space
2 10487806s 12580863s 2093058s extended
5 10487808s 12580863s 2093056s logical linux-swap(v1)
12580864s 14335999s 1755136s Free Space
ดังนั้น sda1 จะต้องมีการขยายด้วยพื้นที่ว่างที่ส่วนท้ายของดิสก์ แต่พาร์ทิชัน swap อยู่ระหว่างพวกเขา นี่คือวิธีที่คุณสามารถทำได้:
ก่อนอื่นเราต้องปิดการแลกเปลี่ยน ตรวจสอบว่ามีการใช้งานเท่าใดและคุณสามารถปิดได้
$ free -h
total used free shared buff/cache available
Mem: 992M 52M 464M 3.2M 475M 784M
Swap: 1.0G 0B 1.0G
การแลกเปลี่ยนไม่ได้ใช้ที่นี่เพื่อให้เราสามารถปิดได้
$sudo swapoff /dev/sda5
ตอนนี้เราจะเปลี่ยนตารางพาร์ติชัน:
$sudo fdisk /dev/sda
(หมายเหตุ: หากคุณมีพาร์ติชั่นแรกเริ่มที่ภาค 63 แทน 2048 คุณจะต้องเพิ่มตัวเลือก-c=dos
)
Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/sda: 6.9 GiB, 7340032000 bytes, 14336000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x9e11c6df
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 10485759 10483712 5G 83 Linux
/dev/sda2 10487806 12580863 2093058 1022M 5 Extended
/dev/sda5 10487808 12580863 2093056 1022M 82 Linux swap / Solaris
Command (m for help): d
Partition number (1,2,5, default 5): 2
Partition 2 has been deleted.
Command (m for help): d
Selected partition 1
Partition 1 has been deleted.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-14335999, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-14335999, default 14335999): 12242941
Created a new partition 1 of type 'Linux' and of size 5.9 GiB.
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (12242942-14335999, default 12242944):
Last sector, +sectors or +size{K,M,G,T,P} (12242944-14335999, default 14335999):
Created a new partition 2 of type 'Linux' and of size 1022 MiB.
Command (m for help): a
Partition number (1,2, default 2): 1
The bootable flag on partition 1 is enabled now.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Device or resource busy
The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).
หมายเหตุ: ขนาดของ sda1 คือยอดรวมของภาคลบด้วยขนาดเซกเตอร์ของพาร์ติชั่นสว็อปของคุณ: 14335999-2093058 = 12242941
ในฐานะที่เป็น fdisk กล่าวถึง: เคอร์เนลยังคงใช้ตารางพาร์ทิชันเก่าดังนั้นเราจึงจำเป็นต้องโหลดใหม่
$partprobe
ตอนนี้เราจำเป็นต้องเรียกใช้ resize2fs บน sda1 (อย่าลืมสิ่งนี้!)
$resize2fs /dev/sda1
resize2fs 1.42.12 (29-Aug-2014)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 10
The filesystem on /dev/sda1 is now 38833617 (4k) blocks long.
ตอนนี้สิ่งต่าง ๆ ยังไม่จบ ตามที่คุณอาจสังเกตเห็นว่า sda2 ถูกแบ่งพาร์ติชันเป็นประเภท Linux (Ext4) ด้วยเหตุผลบางอย่างไม่มีวิธีใน fdisk ในการเลือกประเภท ดังนั้นเราต้องเลือกใช้มันcfdisk
$ sudo cfdisk
เลือก sda2 และเปลี่ยนประเภทเป็น82 Linux swap / Solaris
และให้แน่ใจว่าคุณเขียน (พิมพ์ใช่เพื่อยืนยัน)
ตอนนี้เราสามารถเปิดใช้งานการแลกเปลี่ยนอีกครั้ง
$mkswap /dev/sda2
/dev/sda2
UUID=d58bf1cb-d27a-487d-b337-056767fd5ad6 none swap sw 0 0
และในที่สุดก็เปิดใช้งาน:
$swapon /dev/sda2
สิ่งเดียวที่เราต้องทำคืออัพเดต fstab เพื่อติดตั้ง swap partition โดยอัตโนมัติเมื่อทำการบูท
$sudo nano /etc/fstab
และเปลี่ยน UUID ของ swap partition เป็น output ด้านบน:
# swap was on /dev/sda5 during installation
UUID=d58bf1cb-d27a-487d-b337-056767fd5ad6 none swap sw 0 0
ตอนนี้ทุกอย่างดีและคุณสามารถรีบูตได้โดยไม่มีปัญหา
mkswap
& swapon
จำเป็นต้องรันบน sda2 ฉันทำผิดพลาดในตอนต้นของการโพสต์ของฉัน: swapoff
ต้องดำเนินการใน sda5 ความคิดเห็นยินดีต้อนรับเสมอมันเป็นเรื่องยากที่จะทราบ
cryptdisks_stop
แล้วปรับปรุง / etc / crypttab แทนและเริ่มต้นใหม่กับ/etc/fstab
cryptdisks cryptdisks_start
ผมก็ไม่ได้ประสบความสำเร็จโดยไม่ต้องนี้umount
, pivot_root
หรือการกำจัดชั่วคราวของพาร์ทิชันหลักที่ใช้แยก 3.2 บน Ubuntu 16.04, 4.4.0 เคอร์เนล เพื่อความระมัดระวังฉันได้ทำทุกอย่างจากคอนโซลเสมือนที่ปิดการใช้งานเครือข่ายและถ่ายภาพไว้ล่วงหน้าในกรณี แต่ไม่จำเป็นต้องใช้สแนปชอตดังนั้นฉันจึงทำได้เช่นนี้ผ่าน SSH โดยไม่ต้องเปลี่ยนระดับแนวนอน
กำหนดขนาดพาร์ติชัน: parted /dev/sda1 print | egrep "Disk.*GB"
เลือกที่จะเปลี่ยนเป็นโหมดผู้ใช้หลายคนโดยไม่มีระบบเครือข่าย (ต้องทำจากคอนโซลไม่ใช่ SSH):
runlevel # remember the original runlevel
init 2
อาจเลือกใช้สแนปชอตของ VM อย่างระมัดระวัง
ปรับขนาดพาร์ติชัน:
parted
p
resizepart NUMBER SIZE
# answer "Yes" when asked about resizing a live partition.
q
ปรับขนาดระบบไฟล์: resize2fs /dev/sda1
หากมีสิ่งใดผิดพลาดคุณสามารถกู้คืนสแน็ปช็อตได้ที่นี่ หากทุกอย่างinit 5
เรียบร้อยแล้วให้กลับสู่ระดับปกติ (ได้รับด้านบน) - ปกติ 5: มันอาจเป็นการดีกว่าที่จะทำการรีบูทเต็มรูปแบบ ณ จุดนี้เพื่อให้แน่ใจว่าทุกอย่างกลับมาอย่างถูกต้อง (ฉันมีปัญหาวันที่ / ntp หลังจากนั้น)
ทำตามขั้นตอนเหล่านี้
su
parted
p
เพื่อดูพาร์ติชันที่มีอยู่rm PARTITION NUMBER
เพื่อสร้างพื้นที่ว่างresizepart ROOT NUMBER
และรีบูตระบบหากจำเป็นparted
จากการพิมพ์exit
และพิมพ์เทอร์มินัลpartprobe
แล้วกด Enter (สามารถทำได้แม้หลังจากรีบูตเครื่อง)resize2fs /dev/sda PARTITION NUMBER
และเพลิดเพลินไปกับการแบ่งพาร์ติชันที่กว้างขวางตามที่ระบุไว้ก่อนหน้า:
สามารถขยายการถ่ายทอดสดจากระบบรูทได้ (ไม่ยากเนื่องจากส่วนการบู๊ตจะไม่ถูกย้าย)
การลดขนาดพาร์ติชันรูตสดจะต้องทำจากอุปกรณ์บูตภายนอก (บูตจากระบบ live cd / usb-stick) ราวกับว่ามีข้อผิดพลาดใด ๆ ไม่ตรงกัน .. สิ่งที่ .. ระบบของคุณค้างต้องรีบูตและในที่สุดจะไม่ สามารถบูตได้อย่างถูกต้อง
การเรียงลำดับใด ๆ "แต่ฉันทำแล้วมันใช้งานได้" เป็นโชคที่บริสุทธิ์