วิธีการเปลี่ยนชื่อย่อย BTRFS


24

ฉันมีระบบไฟล์ BTRFS ที่มีชุดของไดรฟ์ย่อยในนั้น จนถึงตอนนี้ดีมาก ฉันต้องการเปลี่ยนชื่อของ subvolume แต่น่าเสียดายที่btrfsโปรแกรมไม่อนุญาตให้ฉันเปลี่ยนชื่อ subvolume การค้นหาด้วย Google ทำให้ได้ผลลัพธ์บางอย่างอย่างหนึ่งบอกว่าฉันทำได้mvอีกอันบอกว่าฉันทำได้แค่snapshotชื่อใหม่และลบซับโวลูมเก่า ก่อนที่ฉันจะพังพาร์ติชันของฉันและต้องโหลดจากการสำรองข้อมูล (มีขนาดค่อนข้างใหญ่) คำถามของฉันคือ:

  • วิธีที่ดีที่สุดในการเปลี่ยนชื่อ subvolume ในปัจจุบันคืออะไร?
  • เป็นไปmvได้หรือไม่ที่จะทำให้โครงสร้างภายในบางอย่างใช้ไม่ได้
  • กำลังสร้างสแนปช็อตใหม่และลบซับวูฟเฟอร์เก่าออกไปหรือมีข้อบกพร่องบางอย่างหรือไม่?

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


1
ดีใจที่ได้ยินว่า btrfs ทำงานได้ดีสำหรับคุณ มันทำงานได้ดีสำหรับฉันจนเกินไป ไม่มีปัญหา.
MountainX สำหรับ Monica Cellio

คำตอบ:


16

แค่mvนี้แหละ นั่นเป็นวิธีที่แนะนำในเอกสารชุมชนอูบุนตู

และเพื่อชี้แจงเพิ่มเติมว่าทำไมถึงเป็นวิธีที่ถูกต้องนี่คือข้อความจาก btrfs sysadmin guide:

ภาพรวม

สแน็ปช็อตเป็นเพียงไดรฟ์ย่อยที่ใช้ข้อมูลร่วมกัน (และข้อมูลเมตา) กับส่วนย่อยอื่น ๆ โดยใช้ความสามารถ COW ของ btrfs เมื่อทำสแน็ปช็อต [เขียนได้] จะไม่มีความแตกต่างในสถานะระหว่างไดรฟ์ย่อยดั้งเดิมและสแน็ปช็อตย่อยใหม่ หากต้องการย้อนกลับไปเป็นสแน็ปช็อตให้ยกเลิกการต่อเชื่อมไดรฟ์ย่อยดั้งเดิมที่แก้ไขแล้วและเมานต์สแนปชอตแทน เมื่อถึงจุดนี้ซับโวลูมดั้งเดิมอาจถูกลบหากต้องการ เนื่องจากสแน็ปช็อตเป็น subvolume สแน็ปช็อตของสแน็ปช็อตจึงเป็นไปได้เช่นกัน


8

มีบางสิ่งที่สำคัญที่ควรทราบ The namings:

btrfs Subvolume - insideระบบไฟล์คอนเทนเนอร์ข้อมูลอิสระ มันจะแสดงเป็นไดเรกทอรีของ FS ที่มีอยู่ หากคุณสร้าง subvolume ใหม่มันจะว่างเปล่าพร้อมที่จะใช้บล็อกข้อมูลแบบลอจิคัลภายในระบบไฟล์ สะดวกในการใช้งานที่ควรแยกข้อมูลอย่างมีเหตุผลเช่น VM หรือไคลเอนต์ที่แตกต่างกันในไดรฟ์ย่อยที่แตกต่างกัน สิ่งนี้อนุญาตให้very fastลบบล็อกข้อมูลโลจิคัลทั้งหมดด้วยคำสั่ง subvolume delete เท่านั้น

btrfs Snapshot - สำเนาของไดรexistingฟ์ย่อยที่มีข้อมูลทั้งหมดในขณะที่ทำสแน็ปช็อตระบบปฏิบัติการ สามารถใช้เป็นการสำรองข้อมูลปฏิบัติการเพื่อคืนค่าการตั้งค่าหรือการเปลี่ยนแปลงเช่นสร้าง subvolume snapshot ทำการเปลี่ยนแปลง (VM หรือ data) ทดสอบว่าทุกอย่างเรียบร้อยดีหลังจากระยะเวลาผ่อนผันลบ snapshot ออก สิ่งสำคัญที่ควรทราบ: สแนปชอตสามารถอ่านได้อย่างเดียว ( -rสวิตช์) และสามารถใช้เป็นบล็อกที่เพิ่มขึ้นของการเปลี่ยนแปลง FS และอาจถูกถ่ายโอนไปยัง BTRFS อื่น!

ข้อ จำกัด BTRFS ปัจจุบัน (2016-12-30):

การคัดลอกหรือย้ายข้อมูลระหว่าง subvolumes เช่นmv dir1/dataset1 dir_subvolume1/สร้าง io จริงทั้งหมดเพื่อคัดลอกข้อมูลไปยัง subvolume อื่นและในกรณีที่มีการย้ายออกจากเดิม และการคัดลอกข้อมูลที่มีประสิทธิภาพมากเพียงแค่ทำการอ้างอิงและใช้คุณลักษณะ COW ของ BTRFS:

cp -a --reflink=always dir1/dataset1 dir_subvolume1/

และถ้าจำเป็น:

rm -rf dir1/dataset1

สแน็ปช็อต Subvolume แบบอ่านอย่างเดียวสามารถเปลี่ยนชื่อ (ย้ายด้วยmv) ที่ระดับไดเรกทอรีที่มีอยู่ แต่ไม่สามารถเปลี่ยนชื่อ / ย้ายไปยังระดับไดเรกทอรีย่อยที่แตกต่างกัน เช่นmv /btrfs/subvol_snap1 /btrfs/.snaphotsเป็นไปไม่ได้ข้อผิดพลาดที่อธิบายได้ไม่มากนัก: mv: cannot move 'subvol_snap1' to '.snapshots/subvol_snap1': Read-only file system. เพื่อให้สามารถย้ายสแน็ปช็อตดังกล่าวคุณต้องสร้างสแน็ปช็อตแบบอ่านอย่างเดียวใหม่ของสแน็ปช็อตแบบอ่านอย่างเดียวที่มีอยู่ไปยังตำแหน่งที่ต้องการใหม่แล้วลบอันเก่า:

btrfs sub snap -r /btrfs/subvol_snap1 /btrfs/.snaphots/subvol_snap1
btrfs sub del /btrfs/subvol_snap1

เพียงเพื่อชีวิตที่ง่ายขึ้น:

btrfs sub list /btrfs

ฉันหวังว่านี่จะช่วยประหยัดเวลาได้มากสำหรับแฟน ๆ btrfs ใหม่ :)


4

หากคุณต้องการเปลี่ยนชื่อระดับเสียงรูทเป็นรูทีนย่อยที่ซ้อนกันคุณจะต้องถ่ายภาพจากนั้นจึงทำfind $ROOT_VOL -xdev -deleteเพื่อลบเนื้อหาก่อนหน้าของรูตโวลุ่ม การย้อนกลับ (เปลี่ยนชื่อ subvolume ไปเป็นปริมาณรูท) ดูเหมือนจะเป็นไปไม่ได้

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