ยืนยันหรือยกเลิกสแน็ปช็อต Linux LVM หรือไม่


16

ฉันกำลังจะทำการอัปเกรดทดสอบบนเซิร์ฟเวอร์ CentOS 5 ของฉัน หากการอัพเกรดล้มเหลวฉันต้องการที่จะสามารถสำรองการเปลี่ยนแปลงในระบบไฟล์ สถานการณ์นี้ดูเหมือนจะคล้ายกับตัวอย่างในส่วน 3.8 ของ LVM HOWTOสำหรับสแน็ปช็อตการอ่าน - เขียน LVM2 - แต่ตัวอย่างค่อนข้างขาดในวิธีการจริง

  1. ฉันจะยอมรับการเปลี่ยนแปลงโดยรวมพวกเขากลับเข้าสู่พาร์ติชันดั้งเดิมได้อย่างไร

  2. ฉันจะคืนค่าการเปลี่ยนแปลงคืนค่าระบบไฟล์กลับสู่สถานะเดิมได้อย่างไร ฉันควรสมมติว่าฉันจะต้องเริ่มบริการหลายอย่างใหม่ถ้าไม่รีบูตทันที?

  3. เป็นไปได้หรือไม่ที่จะรวบรวมเฉพาะบางไดเรกทอรีในพาร์ติชั่นหรือเป็นการดำเนินการทั่วทั้งพาร์ติชั่น?

คำตอบ:


11

ฟังก์ชันการรวมสแนปชอตของตัวจับคู่ LVM2 / อุปกรณ์พร้อมใช้งานถ้าคุณใช้ Linux 2.6.33+ และใช้ LVM 2.0.58+:

lvconvert --merge

ดูโพสต์นี้: http://www.jonnor.com/2010/02/lvm-snapshot-merging-avaliable/

มันอ้างอิงhttp://kernelnewbies.org/Linux_2_6_33 (ดูหัวข้อ 5, MD / DM) และ LVM changelog ที่ 2.0.58: ftp://sources.redhat.com/pub/lvm2/WHATS_NEW

แต่ฉันยังบอกไม่ได้ถึงวิธีการใช้อย่างถูกต้อง ;-)


dmsetup targetsควรแสดงsnapshot-mergeหากเป็นกรณีที่คำสั่ง merge-, นำไปใช้กับ snapshot-lv จะเปลี่ยนกลับไปเป็นสถานะที่ใช้ snapshot
นิลส์

OP ดูเหมือนสับสนเกี่ยวกับการยอมรับการเปลี่ยนแปลงผ่านขั้นตอนการรวมบางอย่าง การเปลี่ยนแปลงมีความมุ่งมั่นเมื่อภาพรวมมีขนาดใหญ่ขึ้น สแน็ปช็อต (ของการเปลี่ยนแปลง) เป็นข้อมูลที่จำเป็นสำหรับการสำรองข้อมูลผ่าน lvconvert --merge หาก OP มีความสุขกับการเปลี่ยนแปลงของเขาเขาสามารถลบสแน็ปช็อตผ่าน lvremove ได้
วินซ์

21

ฉันเพิ่งลองอัพเกรดตาม snapshot กับ Ubuntu และใช่ฉันต้องการรีบูตหลายครั้ง ขั้นแรกให้เปลี่ยนชื่อ root-lv เดิมเป็นอย่างอื่นดังนั้นคุณสามารถตั้งชื่อเดิมให้กับ snapshot ได้ (เนื่องจากการอัปเกรดสร้างการเปลี่ยนแปลงจำนวนมากและการเปลี่ยนแปลงจะเร็วกว่าสแนปชอตมากกว่าเดิม):

 # lvrename lvm root root-old
 # lvcreate -n root -s lvm/root-old -L 10G

ควรเลือกขนาดที่เหมาะสม จากนั้นรีบูทดังนั้น 'ใหม่' lvm / ubuntu จะถูกเมาท์เป็นรูทและคุณสามารถทำการอัพเกรดได้ ตอนนี้คุณสามารถทดสอบเวอร์ชันใหม่และเปลี่ยนเป็นระบบเก่าได้ด้วย

 # lvrename lvm root root-new
 # lvrename lvm root-old root
 # reboot

ถ้าคุณต้องการที่จะลดการอัพเกรดเพียงแค่เรียกใช้ (จากระบบเก่า)

# lvremove lvm/root-new

หากคุณต้องการยอมรับการเปลี่ยนแปลงเพียงแค่เรียกใช้ (จากระบบเก่า)

# lvconvert --merge lvm/root-new

หรือจากระบบใหม่

# lvrename lvm root root-new
# lvconvert --merge lvm/root-new
# lvrename lvm root-old root

ตามด้วยรีบูต ระบบจะปฏิเสธที่จะผสานทันทีตั้งแต่เปิดวอลุ่ม ดังนั้นการผสานจะเริ่มขึ้นในระหว่างการบู๊ตและดำเนินการต่อในขณะที่คุณสามารถทำงานกับระบบได้แล้ว

โอ้และโดยวิธี: เมื่อเปลี่ยนระหว่างระบบอย่าลืมใช้เคอร์เนลที่เหมาะสม ตั้งแต่ / boot ไม่ได้เป็นส่วนหนึ่งของ LVM เมล็ดเก่าและใหม่จะถูกวางไว้ที่นั่นแบบเคียงข้างกัน


ขอบคุณสำหรับคำตอบ. ฉันเพิ่งเล่นซ้ำโพรซีเดอร์ของคุณในเครื่องเสมือน CentOS 7 และมันใช้งานได้อย่างมีเสน่ห์ หลังจากรีเซ็ตเครื่องเสมือนของฉันในระหว่างกระบวนการผสานระบบย่อย LVM ดำเนินการต่อในขณะที่ระบบยังคงเข้าถึงไฟล์ที่อัปเกรด
Anderson Medeiros Gomes

ส่วนหนึ่งของคำตอบนี้ดูเหมือนจะแนะนำการเปลี่ยนแปลงที่กระทำผ่าน lvconvert --merge เมื่อสแน็ปช็อตมีขนาดใหญ่ขึ้นการเปลี่ยนแปลงก็กำลังเกิดขึ้นเช่นกัน lvconvert --merge แปลงกลับ (แบ็คเอาต์) การเปลี่ยนแปลงโดยใช้ข้อมูลสแน็ปช็อต
วินซ์

10

โอเคฉันคิดว่าฉันรู้แล้วว่าได้อ่าน HOWTO 3.8 อีกครั้ง

  • สแน็ปช็อตแบบอ่านอย่างเดียว (เช่น LVM1) มีความแตกต่างระดับบล็อกหลังจากการสร้างสแน็ปช็อต - ต้นฉบับยังคงได้รับการเปลี่ยนแปลง แต่สแน็ปช็อตยังคงเป็นตัวแทนของต้นฉบับ อ่านจากภาพรวมนำเสนอข้อมูลตามที่ปรากฏในขณะนั้น
  • อ่านเขียนภาพรวม (ค่าเริ่มต้นใน LVM2) สามารถเขียน: พวกเขากำลังเป็นทางแยกของพาร์ทิชันเดิม การเขียนไปที่สแน็ปช็อตจะไม่เปลี่ยนแปลงต้นฉบับ

วิธีการทำงานของสแน็ปช็อตคือชุดการเปลี่ยนแปลงระดับบล็อกจากต้นฉบับ ดังนั้นเมื่อต้นฉบับถูกเขียนถึงสิ่งต่อไปนี้จะเกิดขึ้น:

  1. มีบางอย่างพยายามเขียนไปยังต้นฉบับ
  2. ต้นฉบับจะถูกอ่านและบล็อกจากต้นฉบับจะถูกคัดลอกไปยังสแน็ปช็อต
  3. ต้นฉบับได้รับการเปลี่ยนแปลง
  4. ภาพรวมมี "ความแตกต่างย้อนกลับ" - การเปลี่ยนแปลงที่ทำให้รูปลักษณ์ดั้งเดิมเหมือนที่เคยทำเมื่อสร้างสแนปชอต

ดังนั้นการละทิ้งสแนปชอตจะไม่ส่งผลกระทบต่อต้นฉบับเลย - เนื่องจากต้นฉบับมีการเปลี่ยนแปลงและสแน็ปช็อตก็มีรายการการเปลี่ยนแปลงเหล่านั้น

ตอบคำถามของฉันเอง:

สร้างสแน็ปช็อตใหม่ด้วย LVM หากการอัปเดตสามารถกำหนดค่าให้เขียนไปยังจุดต่อสแนปชอตให้ใช้สแน็ปช็อต R / W มิฉะนั้น RO หรือ R / W จะทำ

แล้ว:

  • ถ้าเขียนไปR / W ภาพรวมจุดติดกระทำโดยการเขียนภาพรวมในการเดิมและเปลี่ยนกลับโดยการขว้างปาออกไปภาพรวม
  • ถ้าเขียนไปที่เดิมจุดติดกระทำโดยการขว้างปาออกไปภาพรวมและการเปลี่ยนกลับโดยการเขียนจากสแน็ปช็อตไปที่ต้นฉบับ

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


ยังไม่มีเครื่องมือผสาน LVM ให้ใช้งาน มันอยู่ในผลงาน แต่ฉันไม่เชื่อว่ามันจะเสร็จสมบูรณ์
Ignacio Vazquez-Abrams

เครื่องมือผสานอยู่ในขณะนี้ (อย่างน้อยใน Ubuntu Trusty) - lvconvert --merge <snapshot-name>จะ "กู้คืน" ดิสก์ดั้งเดิมของคุณไปยังสแนปชอตนั้นและลบสแนปชอตนั้น แน่นอนคุณสามารถกู้คืนได้อย่างรวดเร็วทันที
dpb

3

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

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

ฉันไม่ค่อยรู้ว่าอะไรคือวิธีที่แนะนำให้ 'ยกเลิกการเปลี่ยนแปลง' เนื่องจากฉันไม่เคยใช้ LVM ในสถานการณ์ดังกล่าว แต่ฉันคิดว่ามันอธิบายได้ดีในเอกสารประกอบของ LVM ไม่ว่าคุณจะต้องรีสตาร์ทอะไรก็ตามที่มีการเปลี่ยนแปลงการรีบูตอาจเป็นความคิดที่ดี


2
  1. ไม่มีเหตุผลที่จะผสานบางอย่าง เพียงแค่ลบสแน็ปช็อตการเปลี่ยนแปลง LV ระดับคงที่
  2. การผสานจำเป็นต้องยกเลิกการเปลี่ยนแปลง lvconvert --merge <snapshot name>
  3. LVM ทำงานร่วมกับอุปกรณ์บล็อก การเปลี่ยนแปลงที่เกี่ยวข้องกับ FS ควรกระทำโดยยูทิลิตี้พิเศษ (xfs_growfs, e2fsck, ... ) ตามประเภท FS

Snapshot 'หยุด' สถานะดั้งเดิมของ LV ลบสแนปชอตหมายถึงลืมสถานะนั้น ผสานภาพรวมหมายถึงกลับไปที่สถานะนั้น

แต่ภายใน LVM จะบันทึกข้อมูลที่เขียนใหม่ในสแน็ปช็อต: ตรวจสอบให้แน่ใจว่าขนาดสแน็ปช็อตตรงกับจำนวนการเปลี่ยนแปลงที่คาดไว้ใน LV และสแน็ปช็อต


จริงๆแล้วสแน็ปช็อตจะไม่หยุดอะไรเลย มันบันทึกการเปลี่ยนแปลงในสถานที่พิเศษเพื่อให้พวกเขาสามารถหวนกลับหลังถ้าต้องการ
วินซ์

0

เอกสารกำลังสับสน สำหรับฉันดูเหมือนว่า lvcreate --merge หมายถึงย้อนกลับการเปลี่ยนแปลงทั้งหมดและ lvremove หมายถึงการยอมรับการเปลี่ยนแปลง ความแตกต่างอยู่ในวิธีที่คุณใช้

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

หากคุณเขียนไปที่สแน็ปช็อต (ตัวเลือกใหม่ที่มี LVM2) ซึ่งไม่ใช่พฤติกรรมเริ่มต้นที่ดูเหมือนและอาจต้องเปลี่ยนการกำหนดค่าที่อื่นเพื่อให้แอปพลิเคชันเขียนไปที่สแน็ปช็อตแทนที่จะเป็นโวลุ่มดั้งเดิม

โปรดระวังเมื่อจัดการกับสแนปชอตเนื่องจากบางคนคิดว่าคุณตั้งใจจะใช้วิธีนี้และจะให้คำแนะนำซึ่งอาจทำลายระบบของคุณหากคุณทำงานภายใต้สมมติฐานที่ตรงกันข้าม!


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