เป็นไปได้หรือไม่ที่จะลดขนาด EXT4 ออนไลน์ด้วย LVM?


47

วันนี้ฉันลองสิ่งนี้ในเครื่องของฉันด้วย OpenSUSE 12.3 (เคอร์เนล 3.7):

# resize2fs /dev/mapper/system-srv 2G
resize2fs 1.42.6 (21-Sep-2012)
Filesystem at /dev/mapper/system-srv is mounted on /srv; on-line resizing required
resize2fs: On-line shrinking not supported

/dev/mapper/system-srv เป็นโวลุ่ม EXT4

มันไม่ได้รับการสนับสนุนจริง ๆ หรือฉันพลาดอะไรไป?

คำตอบ:


68

ในฐานะที่เป็นข้อความบอกว่าคุณสามารถเติบโตระบบแฟ้มบนบรรทัด หากคุณต้องการย่อขนาดคุณจะต้องยกเลิกการต่อเชื่อมก่อน

ตามที่ผู้ดูแลระบบไฟล์ ext4 บอกไว้ Ted Ts'o:

ขออภัยไม่รองรับการลดขนาดแบบออนไลน์


12
นั่นเป็นที่น่าเสียดาย ...
อลิเซีย

5
downvote คืออะไร
Michael Hampton

16
@MichaelHampton - ปัญญาอ่อนบางคนยิงทูตได้หรือไม่ : D
tink

2
นั่นคือ 10 ปีที่แล้ว มีการใช้งานหรือยัง
duane

@ รายการหมายเลขไม่ได้ มันไม่น่าเป็นไปได้เช่นกัน
Michael Hampton

16

ใช่คุณสามารถย่อ / ย้าย / ขยายพาร์ติชันรูทได้โดยไม่ต้องบูตเครื่องใหม่ (หรือ livecd หรือ usbkey): อ่านคำตอบนี้ มันเขียนได้ดีมากและง่ายต่อการติดตามแม้ว่าจะค่อนข้างยาวและเสี่ยงเล็กน้อย

resize2fs ไม่สามารถย่อขนาดext4พาร์ติชันออนไลน์ได้ ข้อ จำกัด นี้เมื่อนำไปใช้กับพาร์ติชันรูทอาจทำให้คุณคิดว่าคุณไม่สามารถหลีกเลี่ยงการรีบูตโฮสต์เพื่อลดขนาดrootพาร์ติชันซึ่งอาจเป็นสิ่งที่คุณต้องการหลีกเลี่ยง กระบวนการที่เชื่อมโยงจะอนุญาตให้คุณขยายพาร์ติชันรูทโดยไม่ต้องบูตเครื่องใหม่ ดังนั้นในแง่นี้มันไม่ได้พูดการปรับขนาดออนไลน์อย่างเคร่งครัดเกี่ยวกับสถานะที่ติดตั้งของพาร์ติชันอย่างไรก็ตามมันยังคงเป็นการปรับขนาดออนไลน์ในส่วนที่เกี่ยวกับสถานะออนไลน์ของเครือข่ายหรือความสามารถในการเข้าถึงของโฮสต์

แน่นอนถ้าคุณต้องการขยายพาร์ติชัน ext4 ของคุณคุณควรยึดติดกับresize2fsโซลูชันการทำงานทั่วไป

โซลูชันทั่วไปที่ฉันเชื่อมโยงจะทำงานกับโซลูชันเฉพาะหรือ VPS ทุกประเภท

TLDR; วิธีการแก้ปัญหานี้เกี่ยวข้องกับpivot_rootเพื่อtmpfsให้คุณสามารถใช้umountพาร์ทิชันรูทของคุณอย่างปลอดภัยและอยู่กับมัน เมื่อเสร็จแล้วคุณจะpivot_rootกลับไปที่พาร์ติชันรูทใหม่ของคุณ

สิ่งนี้ช่วยให้การจัดการใด ๆ บนระบบไฟล์รูทค่อนข้างมาก (ย้ายเปลี่ยนระบบไฟล์เปลี่ยนอุปกรณ์ทางกายภาพ ... )

ฉันใช้สิ่งนี้เป็นการส่วนตัวและใช้งานได้ดีกับระบบ debian เช่นกัน แต่คำแนะนำนั้นถูกเขียนขึ้นครั้งแรกในปี 2550 สำหรับ redhat คำตอบที่ฉันเชื่อมโยงได้รับการปรับปรุงสำหรับ CentOS7 มีความเป็นไปได้สูงมากที่มันจะทำงานบน OpenSUSE ของคุณแม้ว่าอาจมีการปรับแต่งบ้าง


4
นี่ไม่ใช่ 'ออนไลน์' เกี่ยวกับการเปรียบเทียบกับ 'ออนไลน์โต' บริการทั้งหมดจะต้องหยุดทำงานและระบบไฟล์รูทของคุณจะไม่สามารถเข้าถึงได้ อาจจะคุ้มค่าที่จะตัดกันสิ่งนี้ด้วยวิธี livecd หรือ initramfs / rdshell ในความคิดเห็นนี้ ฉันเกลียดคนที่สับสนในเรื่องนี้
Brian Chrisman

2
@BrianChrisman นี่เป็น gotcha ที่ได้รับการชี้แจงอย่างชัดเจนและฉันหวังว่าฉันจะได้รับการแก้ไขในโพสต์ของฉัน ขอบคุณมากสำหรับความคิดเห็น
vaab

สิ่งที่ฉันชอบเกี่ยวกับโซลูชันที่อ้างถึงคือ 'เกือบออนไลน์แล้ว' ฉันทำสิ่งนี้โดยการเข้ารหัสสคริปต์และเครื่องมือขนาดเล็กลงในคำสั่ง dracut และเปิดใช้งาน initramfs ผลลัพธ์จาก kexec ถ้าสิ่งนี้สามารถเปิดเซสชัน ssh อย่างใดอย่างหนึ่งตลอดกระบวนการซึ่งจะเป็นการดีที่สุด ฉันคิดว่าถ้าคุณสร้างรูทปลอมด้วย sshd และไฟล์ที่ต้องการเริ่มต้น sshd อีกอัน (เพราะคุณอยู่ที่ ssh'd) บนพอร์ตอื่นจากนั้นคุณสามารถ ssh ไปที่พอร์ตอื่นและตรวจสอบการเชื่อมต่อก่อนทำการ lobotomize ระบบต่อไป
Brian Chrisman

13

หากเคสเป็นรีโมตเซิร์ฟเวอร์ที่ไม่มีคอนโซลคุณสามารถย่อขนาดระบบไฟล์โดยใช้ initramfs ขณะรีบูต คุณต้องเพิ่ม resize2fs เพื่อเริ่มต้นและเรียกใช้ก่อนที่จะติดตั้งรูท

ตัวอย่าง Debian / Ubuntu:

/ etc / initramfs-tools / hooks / resizefs (ปฏิบัติการ):

#!/bin/sh

set -e

PREREQS=""

prereqs() { echo "$PREREQS"; }

case $1 in
    prereqs)
        prereqs
        exit 0
    ;;
esac

. /usr/share/initramfs-tools/hook-functions

copy_exec /sbin/e2fsck
copy_exec /sbin/resize2fs

exit 0

/ etc / initramfs-tools / สคริปต์ / local-premount / resizefs (ปฏิบัติการ)

#!/bin/sh

set -e

PREREQS=""

prereqs() { echo "$PREREQS"; }

case "$1" in
    prereqs)
        prereqs
        exit 0
    ;;
esac

/sbin/e2fsck -yf /dev/sda1
/sbin/resize2fs /dev/sda1 5G
/sbin/e2fsck -yf /dev/sda1

ตอนนี้รัน update-initramfs รีบูตตรวจสอบขนาดลบสคริปต์เหล่านี้และ update-intiramfs อีกครั้ง

สำหรับ dracut (Fedora, CentOS) ให้ใช้ตรรกะเดียวกัน (/usr/lib/dracut/modules.d)

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


2
งานนี้มีเสน่ห์เหมือนกัน โปรดทราบว่าคุณต้องเรียกใช้ update-initramfs ด้วยตัวเลือก -u
Diomidis Spinellis

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