ฉันจะกู้คืนพาร์ติชัน BTRFS ที่จะไม่เชื่อมต่อได้อย่างไร


13

การติดตั้ง 12.04 ยังคงล้มเหลวและวิธีแก้ไขคือให้โปรแกรมติดตั้งข้ามพาร์ติชัน btrfs ที่ฉันเคยใช้เป็น / home

ตอนนี้มันได้รับการติดตั้งแล้วฉันได้พยายามติดตั้งพาร์ติชั่น btrfs เพื่อให้ฉันสามารถเข้าถึงไฟล์ 70GB ได้ มันจะไม่เชื่อมต่อและข้อผิดพลาด btrfsck มีสามบรรทัดต่อไปนี้:

parent transid verify failed on 31302336512 wanted 62455 found 62456
parent transid verify failed on 31302336512 wanted 62455 found 62456
parent transid verify failed on 31302336512 wanted 62455 found 62456

มีคนช่วยบอกวิธีการให้พาร์ทิชันนี้ทำงานได้หรือไม่ ฉันได้อ่านออนไลน์ที่ฉันสามารถกู้คืนข้อมูลโดยใช้ btrfs-restore ได้ แต่ฉันไม่พบโปรแกรมนั้นทุกที่

คำตอบ:


10

วิธีที่ง่ายที่สุด

btrfs-zero-log /dev/sda5

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

มันทำงานอย่างไร:

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

ทั้งนี้หากคุณปิดระบบในช่วงกลางของการเขียนนี้ / ลบหรือทำอะไรบางอย่าง hickups ระบบ (ลงจากหลังม้า USB ที่ถือ btrfs ของคุณจุดติดตั้ง) จากนั้นเมื่อผลตอบแทนว่าติดจะไม่ทำงานมันจะล้มเหลว ( dmesgและbtrfsckประสงค์ แสดงข้อผิดพลาดในรายละเอียดเพิ่มเติม) ...

มองไปที่ dmesg คุณจะเห็นข้อความ transid ที่เหมือนกัน

คุณจะเห็นสิ่งนี้:

parent transid verify failed on 109973766144 wanted 1823 found 1821

นั่นหมายความว่า btrfs ต้องการ transif 1826 (นั่นคือในวารสาร) แต่บนดิสก์ที่เห็น 1821 ดังนั้นดิสก์จึงมีธุรกรรม 2 รายการที่ไม่สอดคล้องกับวารสาร ฉันเองมีความเสี่ยงที่ brtfs-zero-log ที่นี่เพียงเพราะธุรกรรม 2 รายการเท่านั้น แต่จะปลอดภัย 100% หากนี่เป็นข้อมูลเดียวของคุณ (โดยวิธีถ้าคุณมีข้อมูลสำคัญคุณไม่ควรมีสำเนาเพียง 1 สำเนาเสมอมีสำเนา / สำรองข้อมูลในตำแหน่งอื่นที่ปลอดภัยเสมอ - โทษผู้สร้าง btrfs จะไม่ แสดงให้เห็นถึงบุคคลที่ขาดความรับผิดชอบในการไม่มีการสำรองข้อมูล - btrfs ไม่ใช่โซลูชันการสำรองข้อมูลระบบไฟล์ของมัน - ไม่มีอะไรเป็นโซลูชันการสำรองข้อมูลที่แท้จริงนอกเหนือจากการมีสำเนาของมันที่อื่น ๆ - ไม่แม้แต่ไดรฟ์พาริตี้หรือมิเรอร์ นั่งอยู่ใต้ดินในเทือกเขาแอลป์ในขณะที่สำเนาที่ใช้งานอยู่ในสำนักงานของคุณในเท็กซัส)

parent transid verify failed on 31302336512 wanted 62455 found 62456

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

ใช้ btrfsck / dev / sda5 (ซึ่งวิธีการตรวจสอบแบบอ่านอย่างเดียวเพื่อความปลอดภัยอย่างสมบูรณ์ตัวเลือก btrfsck เพียงตัวเดียวที่คุณต้องกังวล) จะแสดงข้อความเหล่านั้น

แต่ระวังว่าข้อมูลนั้นสำคัญหรือไม่ฉันต้องทำก่อน (ดังที่คนอื่นพูด)

mount -t btrfs -o rootflags=recovery,nospace_cache /dev/sda3 /mnt/sda3

mount -t btrfs -o rootflags=recovery,nospace_cache,clear_cache /dev/sda3 /mnt/sda3

mount -t btrfs -o recovery,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3

จากนั้น cp หรือ rsync ไฟล์ทั้งหมดของคุณไปยังตำแหน่งที่ปลอดภัยจากนั้นเมื่อทำ btrfs-zero-log อย่างปลอดภัยหากเป็นการดำเนินการที่ประสบความสำเร็จคุณเพิ่งเสียเวลาสำรองระบบของคุณ (แต่ถ้ามันไม่สำเร็จคุณก็แค่บันทึก ตูด)

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

btrfs restore /dev/sda5 /USB

จากนั้นเมื่อปลอดภัย (เมื่อเสร็จสิ้นการกู้คืน btrfs) ให้ทำ btrfs-zero-log หากการดำเนินการที่ประสบความสำเร็จคุณเพิ่งเสียเวลาสำรองระบบของคุณ (แต่ถ้าไม่สำเร็จคุณจะบันทึก ass)

คุณสามารถเรียกใช้หน้าจอก่อน

screen /bin/bash

btrfs restore /dev/sda5 /USB

หน้าจอด้านบันทึก

หากต้องการแยกออก (คำสั่งจะยังคงทำงาน): ให้ควบคุมแล้วพิมพ์ ": detach" โดยไม่ใส่เครื่องหมายอัญประกาศแล้วกด ENTER

อีกวิธีในการแยกออก: จากนั้นให้ปิด putty หรือเทอร์มินัลของคุณและมันจะแยกออก (คำสั่ง / การคืนค่าจะยังคงทำงานอยู่)

หากต้องการตรวจสอบให้ตรวจสอบย้อนกลับไปที่:

screen -x

หน้าจอ -x จะแนบกับเซสชันแม้ว่าจะถูกแยกออกและไม่เหมือนกับ -h ที่บอกว่าจะแนบแม้ว่าจะแนบไว้แล้วก็ตาม)

หากคุณมีหลายหน้าจอ screen -x จะบอกว่าคุณต้องเจาะจงมากขึ้นในการแนบกับเซสชัน:

screen -ls

ls สำหรับรายการทุกเซสชันง่ายต่อการจดจำ

เพื่อดู PID คุณสามารถทำสิ่งนี้ได้:

ps aux | grep screen

เมื่อคุณพบ PID ของคุณแล้วเรียกใช้หน้าจอเช่นนี้:

screen -x PID

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


7

เมานต์เมื่อบูตโดยใช้ตัวเลือกการเมาท์รูท fs:

rootflags=recovery,nospace_cache

หรือ

rootflags=recovery,nospace_cache,clear_cache

รายการเต็มรูปแบบของตัวเลือกการติดตั้ง btrfs ควรอยู่ที่นี่https://btrfs.wiki.kernel.org/index.php/Mount_optionsและสิ่งอื่น ๆ อาจเป็นประโยชน์เช่นกันเช่น noatime, nodatacow (แก้ไขข้อบกพร่องเคอร์เนลสำหรับฉัน โอกาสที่จะคัดลอกไฟล์ของฉัน)

เพิ่มลงใน grub.cfg / menu.lst ของคุณหรือพิมพ์ลงในขณะที่บูตเครื่อง

สิ่งที่ nospace_cache จะทำให้ช้าลงอย่างมาก เพียงบูตเครื่องรอ (ยาว) ปิดเครื่องแล้วบูตตามปกติ

ฉันมีสิ่งเดียวกันไม่กี่วันที่ผ่านมาและข้างต้นแก้ไขมัน แต่หลังจากนั้นก็มีปัญหาเกี่ยวกับพื้นที่ ... พื้นที่รายงานไม่ได้ 100% แต่ยังสามารถพูดออกจากพื้นที่ได้

==

ฉันคิดว่าคุณสามารถเพิ่มตัวเลือกเดียวกันใน fstab ของคุณได้เช่น:

UUID=0237alksfadg-lhdfkj3624-4fdfjb-9dsfe2d-dfddaf /home btrfs defaults,recovery,nospace_cache,clear_cache,subvol=@home 0  
 2

ถ้าคุณกำลังพยายามที่จะกู้คืนไดเรกทอรี / home UUID=0237alksfadg-lhdfkj3624-4fdfjb-9dsfe2d-dfddafติดมากกว่าพาร์ทิชันที่มี


ทำไมสองnospace_cache?
CVn

มันก็พิมพ์ผิดถูกควรจะเป็น clear_cache
ปีเตอร์

:) คุณเพิ่งบันทึกโดยสำรอง!
derflocki

1

คำตอบของปีเตอร์แก้ปัญหาให้ฉันได้แม้ว่าจะไม่ใช่บน Ubuntu ฉันมี/homeพาร์ติชัน btrfs ที่แน่นอนว่าได้รับความเสียหาย fstabระบบจะบูตไม่ขึ้นเพราะมันอยู่บน ฉันเข้าสู่โหมดการบำรุงรักษาแฮชบรรทัดด้วยพาร์ติชันนั้นและบู๊ตตามปกติ (ฉันมีพาร์ติชัน ext4 สำรองที่ฉันสามารถใช้เป็น/home)

ฉันติดตั้งพาร์ติชันด้วยตนเองด้วยคำสั่งต่อไปนี้:

mount -t btrfs -o recovery,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3และสามารถบันทึกข้อมูลของฉันได้จริง แม้ว่ามันจะไม่ใช้เวลานานในการติดตั้ง ขอบคุณมากปีเตอร์


3
คุณอาจต้องการโพสต์สิ่งนั้นเป็นความคิดเห็นในคำตอบของปีเตอร์ว่า 'สิ่งนี้ได้ผล' และจากนั้นทำเครื่องหมายว่าเป็นคำตอบที่แท้จริง ไม่เช่นนั้นปีเตอร์จะไม่ได้รับเครดิต "จริง" (คะแนนตัวแทน)
โธมัสวอร์ด

1
mount -t btrfs -o ro,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3

ro = อ่านอย่างเดียว

งานนี้สำหรับฉัน


1
คุณอ่านความคิดเห็นของ @The Lord of Time ถึงความคิดเห็นที่คล้ายกันซึ่งเพิ่มไว้เป็นคำตอบแล้วหรือยัง ที่นี่เป็นอีกครั้งหากคุณไม่ได้ - "คุณอาจต้องการโพสต์ว่าเป็นความคิดเห็นในคำตอบของเพื่อนพูดว่า 'งานนี้' แล้วทำเครื่องหมายว่าเป็นคำตอบที่แท้จริงมิฉะนั้นปีเตอร์จะไม่ได้รับ" ความจริง " เครดิต (คะแนนตัวแทน) "
geezanansa

1

ผมมีปัญหาเดียวกัน. หลังจากรีบูตฉันไม่สามารถเมานต์พาร์ทิชัน btrfs ของฉันได้อีกต่อไป อย่างไรก็ตามการแก้ปัญหาที่กล่าวถึงในที่นี้ไม่สามารถแก้ไขได้

สิ่งที่แก้ไขได้สำหรับฉันคืออัปเกรดเคอร์เนลจาก 3.10 เป็น 3.12 หลังจากรีบูตพาร์ติชัน btrfs สามารถติดตั้งอีกครั้ง

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