การย้ายระบบไฟล์ ZFS จากกลุ่มหนึ่งไปยังอีกกลุ่มหนึ่ง


18

ฉันกำลังขยายเซิร์ฟเวอร์ Solaris 10 U8 ด้วยพูลหน่วยเก็บข้อมูลเพิ่มเติมนอกเหนือจากรูทพูล

วิธีที่มีประสิทธิภาพ / ง่าย / น่าเชื่อถือที่สุดในการย้ายระบบไฟล์ ZFS เฉพาะจาก rpool ไปยังพูลหน่วยเก็บข้อมูลใหม่นี้คืออะไร?

สามารถทำออนไลน์ได้หรือฉันควรปิดบริการโดยใช้พูลเหล่านี้ก่อน

คำตอบ:


15

คำถามเกี่ยวกับการปิดใช้งานบริการนั้นขึ้นอยู่กับบริการเป็นหลัก:

  • พวกเขากำลังเขียนไปยังระบบไฟล์ที่คุณวางแผนจะย้ายหรือไม่?
  • พวกเขาจัดเก็บข้อมูลถาวรที่คุณต้องการเก็บ

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

  • สร้างภาพรวม
  • ส่งสแนปชอตนั้นตามวิธีที่แนะนำก่อนหน้านี้ แต่ในขณะที่ยังคงให้บริการทั้งหมดทำงานอยู่
  • เมื่อได้รับ fs บนพูลอื่นให้ปิดใช้งานเซอร์วิสขอบเขตที่สำคัญกับระบบไฟล์นั้น ตรวจสอบให้แน่ใจว่าระบบไฟล์ใหม่ในพูลปลายทางไม่ได้ถูกแก้ไขเนื่องจากการเปลี่ยนแปลงจะถูกยกเลิกในภายหลัง
  • สร้างภาพรวมที่สอง (เช่น snapshot2)
  • ส่งสแน็ปช็อตที่สองเพิ่มขึ้นนั่นจะเร็วกว่าการถ่ายโอนก่อนหน้ามาก เช่น:

    zfs send -i rpool / filesystem @ snapshot rpool / filesystem @ snapshot2 | zfs ได้รับ -F destinationpool / filesystem

  • เมื่อเสร็จแล้วให้ย้ายจุดเมานต์ระบบไฟล์จากชุดข้อมูลเก่าไปยังชุดใหม่ เช่น:

    zfs set mountpoint=/application/directory.old rpool/filesystem
    

    zfs set mountpoint = / application / directory destination / filesystem

คุณต้องตรวจสอบให้แน่ใจว่าไม่มีกระบวนการใดถูกผูกไว้กับ/application/filesystem(เช่น: การเข้าถึงไฟล์หรือให้มันเป็นไดเรกทอรีปัจจุบัน) เพื่อให้บรรลุ

  • เปิดใช้งานบริการอีกครั้งและคุณทำเสร็จแล้ว

10

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

zfs send rpool/filesystem@snapshot | zfs receive destinationpool/filesystem

แก้ไข:

หากคุณติดตั้งคำสั่ง "pipe view" (pv) คุณสามารถตรวจสอบสถานะการถ่ายโอนด้วย:

zfs send rpool/filesystem@snapshot | pv | zfs receive destinationpool/filesystem

10

ฉันทำซ้ำสิ่งที่ jlliagre พูดมาก แต่ด้วยการเพิ่มเติมสำหรับระบบไฟล์ที่สืบทอด (ส่วนใหญ่ดังนั้นฉันจึงมีการอ้างอิงเมื่อฉันลืม)

หากคุณมีระบบย่อยย่อยคุณจะต้องใช้-rแฟล็กในคำสั่ง zfs snapshot และแฟล็ก-rหรือ-Rบนzfs sendคำสั่ง ตัวพิมพ์ใหญ่-Rจะย้ายคุณสมบัติสแน็ปช็อตและโคลนทั้งหมด

ในการย้ายพูลทั้งหมด:

zfs snapshot -r sourcepool@moving
zfs send -R sourcepool@moving | zfs receive -F destpool

จากนั้นเพื่อซิงค์การเปลี่ยนแปลงสำหรับช่วงเวลาการย้ายข้อมูลสั้นลงปิดแอปพลิเคชันปิด samba, nfs

zfs snapshot -r sourcepool@moving2
zfs send -Ri sourcepool@moving sourcepool@moving2 | zfs receive -F destpool

หากคุณกำลังสร้างสแนปชอตหลายรายการสำหรับการย้ายข้อมูลให้อ่านหน้า man เกี่ยวกับzfs send -Iสวิตช์


3
ในการทดลองของฉันคำสั่งที่แน่นอนดูเหมือนจะเป็น: zfs send -R Pool0 @ moving | zfs ได้รับ -dF Pool1
TinkerTank

4

คุณจะพบประโยชน์บางประการในการใช้เครื่องมือเช่น "mbuffer" ในขั้นตอนการทำงาน เห็นได้ชัดว่าประสิทธิภาพการส่ง / recv ของ ZFS เพิ่มขึ้นอย่างรวดเร็วหากปลายทั้งสองสามารถส่งข้อมูลอย่างต่อเนื่องเป็นส่วนใหญ่และไม่มี mbuffer (หรือสิ่งที่คล้ายกัน) คุณจะได้รับเอฟเฟกต์ ping-pong


โปรดทราบว่านี่เป็นคำถามที่เก่ามาก (มากกว่า 5 ปี) และคำตอบของคุณไม่น่าจะเพิ่มสิ่งใด ๆ ลงในคำถามที่เก่า
Catherine MacInnes

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