จะสร้างสแน็ปช็อต btrfs ได้อย่างไร?


22

พาร์ติชันของฉัน / home ประกอบด้วยดิสก์ที่มีอยู่จริงทั้งหมด มันถูกจัดรูปแบบเป็น btrfs ฉันต้องการถ่ายภาพ ฉันสับสนเกี่ยวกับการตั้งชื่อ subvolume โดยเฉพาะ

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

อีกปัญหาที่คล้ายกันไม่มีการแก้ปัญหาที่เป็นของแข็ง
คนอื่นสับสนเหมือนฉันเกี่ยวกับปัญหาการตั้งชื่อ

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

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

btrfs subvolume snapshot /home/@home /home/@home_snapshot_20120421

ฉันกล้าจริง ๆ และทดสอบแล้วและมันไม่ทำงาน error accessing /home/@homeมีข้อผิดพลาด ดังที่แสดงด้านล่าง @home มีอยู่ในรายการ

ฉันสับสนในชื่อ subvolume อย่างชัดเจน ฉันจำเป็นต้องใช้มันในการสร้างสแนปชอตหรือไม่ ตัวอย่างบางส่วนแสดงการถ่ายภาพรวมของบ้านโดยใช้/homeเป็นพารามิเตอร์ที่มา /home/@homeแต่ขึ้นอยู่กับตัวอย่างของปริมาณรากมันดูเหมือนว่าฉันที่ฉันจำเป็นต้องใช้

คำสั่งนี้จะใช้งานได้? และถ้าไม่ทำไม?

btrfs subvolume snapshot /home /home/@home_snapshot_20120421

เป็น@เพียงการตั้งชื่อการประชุมหรือไม่? มันมีความหมายหรือไม่?

นี่คือผลลัพธ์ที่อาจเกี่ยวข้อง:

btrfs subvolume list /home
ID 256 top level 5 path @home

ฉันไม่แน่ใจว่ามันหมายถึงอะไรกันแน่ เมื่อฉันลองbtrfs device scanมันทำให้เกิดข้อผิดพลาด (เช่นไม่สามารถสแกนอุปกรณ์ / dev / sda1) ระบบไฟล์ของฉันไม่มีข้อผิดพลาด ทุกอย่างปกติดี.

นี่คือพาร์ทิชันของฉัน ในการตอบกลับหนึ่งคำตอบไม่มี / home ไม่ใช่พาร์ติชัน btrfs เดียวของฉัน

/dev/sda1: (boot partition) TYPE="ext2"  
/dev/sda2: (root partition) TYPE="btrfs"  
/dev/sdb1: (home partition) TYPE="btrfs"  
/dev/sdc1: (shared partition) TYPE="btrfs"  
/dev/sdc2: TYPE="swap"  

ชุมชนจะเป็นผู้ตัดสินใจเกี่ยวกับ repo ...
One Zero

คำตอบ:


19

คำสั่งที่ถูกต้องในการสร้างสแนปชอตของพาร์ติชั่นโฮมของฉันบน Ubuntu 12.04 คืออะไร?

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

sudo btrfs subvolume snapshot /home/ /home/<any_name_you_choose_for_the_snapshot>

นี่คือผลลัพธ์ของฉัน:

ก่อนรันคำสั่งวันนี้:

$ btrfs subvolume list /home  
ID 256 top level 5 path @home  
ID 257 top level 5 path @home/@snapshot_20120521_1936

คำสั่ง:

$ sudo btrfs subvolume snapshot /home/ /home/@snapshot_20120611_1307  
Create a snapshot of '/home/' in '/home/@snapshot_20120611_1307'

หลังจากรันคำสั่งวันนี้:

$ btrfs subvolume list /home  
ID 256 top level 5 path @home  
ID 257 top level 5 path @home/@snapshot_20120521_1936  
ID 258 top level 5 path @home/@snapshot_20120611_1307

ปัญหาเดียวของวิธีนี้คือสแน็ปช็อตจะปรากฏขึ้นเมื่อคุณ ls (รายการ) / home

Wiki ชุมชน Wiki ได้รับการปรับปรุงด้วยวิธีแก้ปัญหานี้ นี่มันคือ:

วิธีทำงานกับ snaphot ในเค้าโครงของ Ubuntu

เพื่อที่จะทำงานกับสแนปชอตของ / หรือ / home ในเลย์เอาต์ Ubuntu มันสะดวกมากที่จะเมานต์ระบบไฟล์ btrfs ในตำแหน่งที่แยกจากกันและทำงานจากด้านบนของทรี btrfs มากกว่าจาก subvolumes ที่ติดตั้ง <- นั่นคือทางออก แต่น่าเสียดายที่มันเป็นไม่สะดวก

sudo mount /dev/sdX# /mnt

เพื่อสร้างภาพรวมใช้ไวยากรณ์เดียวกับที่ฉันใช้ด้านบน:

sudo btrfs subvolume snapshot /mnt/@ /mnt/@_snapshot

สิ่งนี้จะสร้างสแน็ปช็อตของ @ subvolume ที่ชื่อว่า @_snapshot ซึ่งอยู่ที่ด้านบนของทรี btrfs เนื่องจากมันอยู่ด้านบนของแผนผังมันจะไม่ปรากฏขึ้นเมื่อแสดงรายการไฟล์ในโวลุ่มที่เมานต์

ในการย้อนกลับไปเป็นสแน็ปช็อตคุณเพียงแค่เปลี่ยนชื่อเป็นชื่อที่ ubuntu mounts และรีบูต ต่อไปนี้เป็นวิธีเปลี่ยนชื่อ:

sudo mv /mnt/@ /mnt/@_badroot
sudo mv /mnt/@_snapshot /mnt/@

หากต้องการลบสแน็ปช็อตให้ใช้:

sudo btrfs subvolume delete /mnt/@_badroot

btrfs snapshots เป็น subvolumes ในตัวเองและอยู่ในตัวเองการลบ subvolume เก่า @ แบบนี้ก็โอเคถ้าเรามีการแทนที่

หมายเหตุ: คำสั่ง btrfs-tools set-defaultจะทำลายเค้าโครงของ Ubuntu


ดังนั้นคุณอยู่ที่นั่นใช่มั้ย ตอนนี้คุณน่าจะสามารถเมานต์สแนปชอตของคุณได้
เทอร์โบ

ฉันยังไม่ได้ลองติดตั้งเลย และฉันเพิ่งเห็นคำตอบของ psusi เกี่ยวกับแพ็คเกจ apt-btrfs-snapshot นั่นดูน่าสนใจใช่มั้ย
MountainX สำหรับ Monica Cellio

ใช่ฉันพูดถึงมันในจุดที่สามเช่นกัน ขออภัยต้องชี้ให้เห็น;)
เทอร์โบ

ฉันแนะนำให้คุณทำเครื่องหมายคำตอบว่าเป็นคำตอบ
เทอร์โบ

มีวิธีแก้ไขภาพรวมปรากฏขึ้นเมื่อคุณ ls / home ฉันกำลังแก้ไขคำตอบด้วยข้อมูลทันที
MountainX สำหรับ Monica Cellio

11

ตกลงสิ่งแรกก่อน:

  • ชื่อของ subvolume ที่คุณกำลังมองหาที่จะแสดงให้เห็นว่า@home btrfs subvolume list /homeมันติดตั้ง/homeมา @home เป็นชื่อของ subvolume และมี ID 256 ดังนั้นส่วนใหญ่แล้ว / home ของคุณจะจัดรูปแบบเป็น btrfs

  • ตอนนี้เพื่อสร้างภาพรวมของ @home คุณต้องออก: sudo btrfs subvolume snapshot /home/ /home/@home_snapshot_20120421

  • ไดรฟ์ย่อยสามารถมีชื่อใด ๆ The @ คือการประชุมของ Ubuntu ในเวลาติดตั้ง (ถ้าคุณใช้apt-btrfs-snapshotรูทีนย่อยรูทจะต้องตั้งชื่อเป็น@btw) วิกิชุมชนนั้นแนะนำให้รักษา@เป็นรูทและ@homeเป็นบ้านเนื่องจากมันจะถูกเมาท์ สิ่งนี้มีความสำคัญอย่างยิ่งหากคุณต้องการย้อนกลับ: คุณไม่ควรใช้ btrfs subvolume set-default (ไม่ใช่ไวยากรณ์ที่เน้นตามวัตถุประสงค์)

  • สำหรับการที่คุณต้องใช้btrfs device scansudo

  • ในการลบไดรฟ์ย่อยที่คุณสามารถใช้ได้ sudo btrfs subvolume delete @home_snapshot_20120421

คำสั่ง btrfs ทั้งหมดสามารถยากตราบใดที่พวกเขาจะชัดเจนดังนั้นสำหรับตัวอย่างเช่นsudo btrfs device scanสามารถตัดออกไปsudo btrfs d s, sudo btrfs dev scหรืออะไรในระหว่าง

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


ฉันได้รับข้อผิดพลาด:$ sudo btrfs subvolume snapshot @home home/@snapshot_20120611_1257 ERROR: error accessing '@home'
MountainX สำหรับ Monica Cellio

นอกจากนี้ผมไม่ได้มีความสำเร็จกับbtrfs device scanเลย ตัวแปรใด ๆ รวมถึงการใช้sudoทำให้เกิดข้อผิดพลาด "ข้อผิดพลาด: ไม่สามารถสแกนอุปกรณ์ '/ dev / sdX'" โดยที่ X เป็นชื่อที่ถูกต้องเช่น a, a1, b, ฯลฯ
MountainX สำหรับ Monica Cellio

@OneZero: ฉันยังไม่ได้คำตอบทั้งหมด แต่ฉันคิดออกคำสั่งที่ถูกต้องเพื่อสร้างภาพรวมของพาร์ทิชันที่บ้านของฉันใน Ubuntu 12.04 และฉันให้ข้อมูลนั้นเป็นคำตอบด้านล่าง
MountainX สำหรับ Monica Cellio

มันแปลกจริงๆ ฉันตรวจสอบกับพาร์ทิชัน btrfs ของฉันbtrfs sub snap @ /mnt/randomและมันทำงานได้สำหรับฉัน จากนั้นอีกครั้งฉันอยู่ใน / mnt ที่ @ ถูกเมาท์ ขออภัยในความสับสน
เทอร์โบ

@ เทอร์โบ: คำตอบของคุณมีประโยชน์มาก ไม่จำเป็นต้องขอโทษที่พยายามช่วยเหลือ แม้แต่หน้า Ubuntu ก็ยังไม่ชัดเจน เราจะนำมาคิดออกในที่สุด
MountainX สำหรับ Monica Cellio

10

ติดตั้งapt-btrfs-snapshotแพคเกจและใช้ subcommands ของมันlist, snapshot, และdeleteset-default

นี่คือสคริปต์ที่ล้อมรอบbtrfsคำสั่งระดับล่าง มันทำงานได้โดยการติดตั้งระบบไฟล์รูท btrfs เป็นครั้งแรก โดยที่ฉันหมายความรากจริงเมื่อเทียบกับ/@subvolume /ที่ติดตั้งตามปกติ ในคำอื่น ๆ ที่คุณต้องทำงานmount /dev/sda1 /mntเพื่อให้คุณสามารถดู subvolumes ที่จะระบุว่าเป็น/mnt/@, /mnt/@homeและอื่น ๆ ที่คุณสร้างไว้ จากนั้นคุณสามารถbtrfs subvolume snapshot /mnt/@home @snapshot-todayที่จะสร้างภาพรวมของชื่อ/@home /@snapshot-todayเปรียบเทียบกับการทำงานbtrfs subvolume snapshot /home /home/@snapshot_todayซึ่งแทนที่จะสร้างภาพรวมเป็นลูกของ/@homeจึงจะแสดงขึ้นเมื่อคุณและชื่อจริงของมันคือls /home/@home/@snapshot-today

mv /mnt/@home @backup ; mv /mnt/@snapshot-today @homeย้อนกลับไปที่ภาพรวมเป็นเพียงการดำเนินการเปลี่ยนชื่อง่ายๆ ครั้งต่อไปที่คุณบูตเมื่อมันไปติด/@homeใน/homeก็จะพบภาพรวม

เป็นการยากที่จะคาดหัวเพราะคุณต้องคำนึงถึงความแตกต่างระหว่างวิธีที่ btrfs เห็นสิ่งต่าง ๆ และวิธีที่เคอร์เนลมองเห็นสิ่งต่าง ๆ ซึ่งได้รับอิทธิพลจากตัวเลือกการเมานท์ (อาร์กิวเมนต์ย่อยโดยเฉพาะ)

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