ฉันจะรวมสองโลจิคัลวอลุ่มที่อยู่บนฟิสิคัลวอลุ่มเดียวใน LVM ได้อย่างไร?


14

ฉันมีโลจิคัลวอลุ่มสองตัวตัวใดตัวหนึ่งติดตั้งเป็น / ส่วนอีกตัวถูกติดตั้งเป็น / home

ฉันต้องการรวมมันเข้าด้วยกันเพราะ/ปริมาตรใกล้จะหมด (ใช่ฉันรู้ว่าสิ่งที่ใช้พื้นที่ทั้งหมดนั้นไม่ฉันไม่สามารถลบออกได้)

ฉันยินดีที่จะลงเครื่องสักวันหรือสองวันเพื่อทำมัน

ระบบปฏิบัติการ: Linux xxxxx 2.6.32-279.22.1.el6.x86_64 #1 SMP Wed Feb 6 03:10:46 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux(CentOS)


1
ทำไมไม่เพิ่ม/ระดับเสียงนั่นคือจุดที่ใช้ LVM ใช่หรือไม่
jasonwryan

2
@jasonwryan ทำไมฉันต้องปรับด้วยตนเองว่ามีการจัดสรรพื้นที่ดิสก์อย่างไร นั่นคือจุดรวมของระบบไฟล์หรือไม่?
Nick ODell

@NickODell ไม่หากโวลุ่มหนึ่งมีขนาดเล็กเกินไปที่จะเก็บข้อมูลแสดงว่ามันเล็กเกินไป ความจุโดยรวมเป็นปัจจัยของขนาดปริมาณไม่ใช่ขนาดระบบไฟล์ โลจิคัลวอลุ่มทำให้การปรับขนาดวอลุ่มที่เมาต์ทำได้ง่ายขึ้นและเพื่อรวมรีซอร์สหน่วยเก็บข้อมูลที่แตกต่างกันให้เป็นโวลุ่มเดียว ด้วย LVM คุณควรจะสามารถทำสิ่งที่ jasonwryan แนะนำโดยไม่ต้องรีบูตเครื่อง: ตรวจสอบให้แน่ใจว่าผู้ใช้ทั่วไปออกจากระบบ (เพื่อฟรี / กลับบ้าน) umount / home lvreduce (อย่าลืม -r) ติดตั้งใหม่จากนั้นทำการ lvextend บนระบบไฟล์รูทและคุณทำเสร็จแล้ว หากคุณต้องการผสานคุณต้องทำ rsync
Bratchley

@JoelDavis หากฉันต้องการให้ผู้ใช้ทุกคนออกจากระบบมันมีความเกี่ยวข้องหรือไม่หากฉันต้องการรีบูตเครื่อง
Nick ODell

@NickODell อืม ... ใช่มั้ย ระบบ linux ส่วนใหญ่เป็นเซิร์ฟเวอร์คุณควรตระหนักว่ามันจะเป็นข้อสันนิษฐานของผู้คนเว้นแต่คุณจะพูดเป็นอย่างอื่น
Bratchley

คำตอบ:


10

ฉันทำเสร็จแล้ว อย่างไรก็ตามเนื่องจากมีพื้นที่ที่ขาดหายไปในไกด์ทั้งสองฉันจึงจะสรุปสิ่งที่ฉันทำ โปรดทราบว่าฉันได้เปลี่ยนชื่อผู้ใช้ของฉันกับและชื่อของคอมพิวเตอร์ของฉันด้วยzzzz xxxxxxxนอกจากนี้คำสั่งทั้งหมดควรถูกเรียกใช้ในฐานะรูทเว้นแต่จะระบุไว้เป็นอย่างอื่น

ก่อนอื่นฉันสำรอง:

tar -zcvf /media/e14be279-8c11-450a-b52c-1493cff3c632/xxxxxxx-home.tar.gz --exclude=/home/zzzz/Downloads /home

สิ่งนี้จะสร้างการสำรองข้อมูลที่บีบอัดของไดเรกทอรี / home และวางลงในไดรฟ์ภายนอกของฉัน (โปรดทราบว่าไดรฟ์ภายนอกของคุณจะมีเส้นทางอื่น)

ตอนนี้คุณต้องรีบูตเข้าสู่โหมดผู้ใช้คนเดียว

reboot

เมื่อคอมพิวเตอร์เปิดอีกครั้งคุณต้องมองหาหน้าจอดังนี้

Booting Centos 2.6.32-279.22.1.el6.x86_64 in 3 seconds...

กดปุ่มใด ๆ เพื่อขัดจังหวะ คุณควรเห็นหน้าจอดังนี้:

ด้วง boot centos กดแล้วอวกาศแล้วพิมพ์a singleกด Enter

คุณควรเห็นพรอมต์เช่นนี้:

 [root@xxxxxxx /] # 

ป้อนคำสั่งต่อไปนี้:

df -h

มันควรจะแสดงให้คุณSize, และUsed เรากำลังสนใจในAvail จดบันทึกปริมาณการใช้งานระดับเสียงภายในบ้านของคุณ เราจะต้องใช้ในภายหลัง Used

umount /home
e2fsck -f /dev/mapper/vg_xxxxxxx-lv_home

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

resize2fs /dev/mapper/vg_xxxxxxx-lv_home 30G

คำเตือน : ขั้นตอนต่อไปนี้เป็นขั้นตอนที่อาจทำให้ข้อมูลสูญหายได้ ตรวจสอบให้แน่ใจว่าคุณใส่ขนาดที่ใหญ่กว่าคำสั่งก่อนหน้า เพิ่ม 5 กิกะไบต์เพื่อให้แน่ใจ

lvresize -L 35G vg_xxxxxxx/lv_home

บอกให้พาร์ติชันรูทใช้พื้นที่ทั้งหมดที่เราเพิ่งปล่อยให้ว่าง

lvresize -l +100%FREE vg_xxxxxxx/lv_root
resize2fs /dev/mapper/vg_xxxxxxx-lv_root

คัดลอกข้อมูลของคุณไปยังพาร์ติชันราก

mount -t ext4 /dev/mapper/vg_xxxxxxx-lv_home /mnt/home
ls /mnt/home
cp -a /mnt/home/. /home/

(โดยวิธีการที่-aมีความสำคัญเพราะมิฉะนั้นทุกอย่างจะเป็นเจ้าของโดย root และคุณไม่ต้องการที่)
ทำตรวจสอบอย่างรวดเร็วว่าข้อมูลที่คัดลอกอย่างถูกต้อง:

ls -lR /home

ตอนนี้เราลบพาร์ติชั่นภายในบ้านและบอกให้รูทใช้พื้นที่ใหม่อีกครั้ง

umount /mnt/home
lvremove /dev/mapper/vg_xxxxxxx-lv_home
lvresize -l +100%FREE vg_xxxxxxx/lv_root
resize2fs /dev/mapper/vg_xxxxxxx-lv_root

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

nano /etc/fstab

หนึ่งในบรรทัดเหล่านั้นจะบอกระบบให้เมาต์ / home partition ใส่#ก่อนหน้ามัน กด Ctrl-O, Enter, Ctrl-X ตอนนี้คุณสามารถรีบูตได้

(สมมุติว่าถ้าคุณลืมที่จะแก้ไข fstab เหมือนที่ฉันทำคำสั่งเพื่อติดตั้งพาร์ติชันรูทของคุณคือmount -n -o remount -t ext2 /dev/vg_xxxxxxxx/lv_root /)


รักรายละเอียด!
nmr

ฉันพบปัญหาที่คล้ายกัน แต่ฉันไม่สามารถเข้าถึงเครื่องได้ มีวิธีทำเช่นนี้หรือไม่ที่ไม่ต้องทำการบูทเข้าสู่โหมดผู้ใช้คนเดียว?
FrustratedWithFormsDesigner

@FrustratedWithFormsDesigner ในทางทฤษฎีใช่ หากคุณมีสิทธิ์เข้าถึง sshs คุณสามารถสำรองข้อมูล/homeได้ จากนั้นตราบใดที่/homeคุณสามารถถอนติดตั้งคุณสามารถลบออกได้ อย่างไรก็ตามฉันไม่มีคุณสมบัติที่จะพูดคุยกับคุณตลอดกระบวนการ นี่คือสิ่งที่คุณควรถามคำถามใหม่เกี่ยวกับ
Nick ODell

1
@ NickODell: ฉันได้ถามคำถามใหม่: askubuntu.com/questions/1115913/ …
FrustratedWithFormsDesigner

@FrustratedWithFormsDesigner นั่นเป็นคำแนะนำที่ดีกว่าที่ฉันจะให้คุณ
Nick ODell

3

คำเตือน: สำรองข้อมูลสำคัญทั้งหมดก่อนทำอะไร!

คุณจะต้องย้ายข้อมูลทั้งหมดจาก / พาร์ทิชันที่บ้านไปยังพาร์ทิชันอื่นพาร์ทิชันในประเทศหรือไดรฟ์ภายนอกหรือที่อื่น ๆ ที่คุณมีพื้นที่เพียงพอ

ลบ / home lv จากนั้นขยาย / (root) lv

คัดลอกข้อมูลกลับไปที่ / home directory

แก้ไข 1

คำตอบข้างต้นคือสมมติว่าคุณมีพื้นที่ไม่เพียงพอในรูทพาร์ติชันเพื่อวางข้อมูลในโฮมพาร์ติชัน

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

umount /home
mount /dev/mapper/lv-home /mnt/home
cp -a /mnt/home/. /home/

จากนั้นเพียงลบพาร์ติชันหลักและขยายพาร์ติชันราก


3

คุณสามารถทำมันได้โดยไม่ต้องจัดเก็บข้อมูลภายนอกใด ๆ ที่วิ่งออกมาจากแต่คุณจะต้องยกเลิกการต่อเชื่อม//home

นี่ไม่ใช่ขั้นตอนที่มีความเสี่ยงเป็นพิเศษหากคุณระมัดระวัง แต่อย่างไรก็ตามคำแนะนำมาตรฐานนั้นใช้: ทำการสำรองข้อมูลก่อนและทดสอบ

ฉันจะใช้fooสำหรับชื่อกลุ่มวอลุ่มและrootและhomeเป็นชื่อโลจิคัลวอลุ่ม นี้จะทำให้เส้นทางตรรกะปริมาณfoo/rootและfoo/homeและเส้นทางอุปกรณ์และ/dev/mapper/foo-root /dev/mapper/foo-homeฉันคิดว่าพวกเขาอยู่ในกลุ่มวอลุ่มเดียวกันมิฉะนั้นสิ่งนี้จะซับซ้อนมากขึ้นและขึ้นอยู่กับเค้าโครงฟิสิคัลวอลุ่มของกลุ่มวอลุ่มสองกลุ่ม

ขั้นแรกให้ยกเลิกการต่อเชื่อมและเรียกใช้/home e2fsck -f /dev/mapper/foo-homeจากนั้นย่อขนาดระบบไฟล์ก่อนและโลจิคัลวอลุ่มตามลำดับ เรียกใช้resize2fs /dev/mapper/foo-home NNNNที่ NNNN เป็นจำนวนบล็อกที่คุณต้องการที่จะรักษาภายในไดรฟ์ (คุณสามารถใช้กิโลไบต์หรือเมกะไบต์หรือกิกะไบต์แทนที่จะมีคำต่อท้ายK, MหรือG) หลังจากที่หดตัวระบบแฟ้มหดปริมาณตรรกะกับlvresize -L MMMM foo/homeที่ MMMM เป็นจำนวนเมกะไบต์ (ทราบว่าหน่วยเริ่มต้นจะแตกต่างจากresize2fsแต่คุณสามารถใช้คำต่อท้ายเดียวกันK, M, G) ระวังอย่าให้โลจิคัลวอลุ่มลดลงยิ่งกว่าระบบไฟล์ - นี่เป็นขั้นตอนที่อันตรายอย่างหนึ่งในขั้นตอนนี้

ขณะนี้มีห้องว่างในกลุ่มวอลุ่ม เรียกใช้lvresize -l +100%FREE foo/rootเพื่อทำให้ปริมาณรูตคว้าพื้นที่ว่างทั้งหมดในกลุ่มวอลุ่ม จากนั้นรันresize2fs /dev/mapper/foo-root(โดยไม่มีพารามิเตอร์ขนาด) เพื่อขยายระบบไฟล์เพื่อขยายโลจิคัลวอลุ่มทั้งหมด การขยายสามารถทำได้ในขณะที่ติดตั้งไดรฟ์ข้อมูล

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

เมื่อคุณคัดลอกไฟล์ทั้งหมดออกจาก/homeคุณพร้อมที่จะทำลาย ตรวจสอบว่า/homeว่างเปล่า (หากคุณย้ายไฟล์) หรือ/homeคัดลอกไฟล์ทั้งหมดใน/root(ถ้าคุณคัดลอกไฟล์) lvremove foo/homeที่จะทำลายปริมาณตรรกะตอนนี้ไม่จำเป็นเรียกใช้ สุดท้ายขยายปริมาณรากและระบบแฟ้มด้วยlvresize -l 0%FREE foo/rootresize2fs /dev/mapper/foo-home


หมายเหตุ: / home ปฏิเสธที่จะยกเลิกการต่อเชื่อมจนกว่าฉันจะรีบูตเข้าสู่โหมดผู้ใช้คนเดียว
Nick ODell

หมายเหตุ: มันถูกเรียกว่า vg_ (ชื่อเครื่อง) และ lv_home
Nick ODell

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

2

ตกลงฉันพบว่าตัวเองอยู่ในตำแหน่งเดียวกัน ดูเหมือนว่า CentOS /homeสร้างปริมาณรากขนาดเล็กโดยค่าเริ่มต้นและเติมส่วนที่เหลือของพื้นที่ของคุณด้วย ฉันยังทดสอบการตั้งค่าของฉันเป็นครั้งแรกใน VM แต่ด้วย CentOS ดิสก์ขนาดเล็กไม่ได้สร้างไดรฟ์ภายในบ้าน ฉันหยิบปัญหานี้ขึ้นมาก่อนที่จะกลายเป็นข้อ จำกัด ของพื้นที่และยังคิดว่าไม่ต้องเข้าสู่โหมดผู้ใช้คนเดียว ดังนี้

เข้าถึงเครื่อง ssh ใช้ได้ (สมมติว่าผู้ใช้ที่ไม่ใช่รูท)

  1. cd / ดังนั้นคุณไม่ได้อยู่ในไดเรกทอรีบ้าน
  2. sudo -s เราจะเป็นรากฐานของสิ่งนี้ทั้งหมด
  3. lsof /home ตรวจสอบว่าไม่มีใครใช้วอลลุ่มในบ้านไม่ควรจะเป็น
  4. mv, tarหรือที่คล้ายกันเนื้อหาของบ้านไปที่อื่น
  5. lvremove centos/home
  6. แก้ไข/etc/fstabและใส่ความคิดเห็นหรือลบบรรทัดสำหรับ/home
  7. ย้ายเนื้อหาของบ้านที่คุณสำรองไว้ก่อนกลับเข้ามา/home- ตอนนี้คุณอยู่ในตำแหน่งที่ปลอดภัยการรีบูตที่นี่ควรจะเป็น OK
  8. lvresize -l +100%FREE centos/root
  9. xfs_growfs /dev/centos/root บน CentOS 7 ผู้อื่นอาจใช้ resize2fs
  10. df -h คุณประสบความสำเร็จ?

หวังว่านี่จะช่วยให้ใครบางคนง่ายขึ้น มันยอดเยี่ยมมาก ๆ ที่คุณสามารถใช้งานได้บนระบบไฟล์ในปัจจุบัน


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