วิธีการกู้คืนไฟล์ที่เปิด แต่ถูกลบบน Linux โดยใช้ ln แทนที่จะเป็น cp


8

ฉันมีไฟล์ที่กำลังดาวน์โหลด (จากแหล่งที่ยากต่อการดาวน์โหลดซ้ำ) แต่ถูกลบโดยไม่ตั้งใจจากระบบแฟ้มเนมสเปซ (/ tmp / blah) และฉันต้องการกู้คืนไฟล์นี้

ปกติฉันทำได้cp /proc/$PID/fd/$FD /tmp/blahแต่ในกรณีนี้จะทำให้ฉันได้รับสแนปชอตบางส่วนเท่านั้นเนื่องจากไฟล์ยังคงดาวน์โหลดอยู่ นอกจากนี้เมื่อการดาวน์โหลดเสร็จสิ้นกระบวนการดาวน์โหลด (เช่น Chrome) จะปิด FD

มีวิธีกู้คืนโดย inode / สร้างฮาร์ดลิงก์หรือไม่? ทางออกอื่น ๆ ถ้ามันสร้างความแตกต่างฉันก็กังวลกับ ext4 เป็นหลัก

คำตอบ:


11

ลองใช้ส่วนท้ายเพื่อคัดลอกไฟล์อย่างต่อเนื่อง:

tail -c +0 -f /proc/$pid/fd/$fd > filename

แน่นอนคุณจะต้องหยุดกระบวนการหางด้วยมือ (หรือวิธีการภายนอกอื่น ๆ ) เมื่อการดาวน์โหลดเสร็จสิ้น


ทำงานเหมือนจับใจ ฉันเดาว่ามันง่ายกว่าที่ฉันคิดเพราะทุกสิ่งที่คุณต้องการนั้นเป็นเพียงแค่โปรแกรมอื่นที่เปิดไฟล์เดียวกันเพื่อเก็บไว้
Yang

4

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


1

สิ่งนี้จะทำให้งานเสร็จแม้ว่าจะไม่ผ่านการกู้คืน inode:

cp /proc/$PID/fd/$FD /tmp/blah
kill $PID
wget -c $URL -O /tmp/blah

หรือหยุดดาวน์โหลดด้วยตนเองใน Chrome หากคุณไม่ต้องการฆ่าเบราว์เซอร์ทั้งหมด


ถ้าเพียงปัญหาก็ง่ายมากจนฉันสามารถกลับมา / ดาวน์โหลดใหม่ได้อีกครั้ง! ฉันชี้แจงคำถามเพื่อระบุว่าฉันไม่สามารถสันนิษฐานได้ว่าฉันสามารถดาวน์โหลดซ้ำได้
ยาง

ฟังดูเหมือนมีปัญหา :-) ดูเหมือนว่าแฮ็คอิง inode นั้นมีระดับต่ำเกินไปและระบบไฟล์เฉพาะ
Pavel

ใช่ฉันเพิ่งเพิ่มคำถามของฉันไปด้วย: ถ้ามันสร้างความแตกต่างฉันก็กังวลกับ ext4 เป็นส่วนใหญ่
ยาง

1

หากคุณต้องการที่จะทำการเชื่อมโยงอย่างหนักกับสิ่งนี้คุณต้องใช้ตัวเลือก -s (ดูman ln) ดังนั้นในไดเรกทอรี fd ให้เรียกใช้ls -fและค้นหาชื่อไฟล์ (ส่วนใหญ่เป็นตัวเลขสองหลัก) และสร้างln NUMBER destination-file -s

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