ลิงก์ไปยังไอโหนดที่เฉพาะเจาะจง


14

ฉันมีไฟล์ที่ถูกลบ แต่ยังคงเปิดอยู่โดยโปรแกรม ฉันพบหมายเลขไอโหนดโดยใช้ lsof ฉันจะสร้างฮาร์ดลิงก์กลับไปที่ไอโหนดนั้นได้อย่างไร

คำตอบ:


31

คุณไม่สามารถสร้างลิงค์ไปยังมันได้ แต่คุณสามารถรับลิงค์กลับมาได้ มาทำการทดลองกัน:

$ echo blurfl >myfile.txt
$ tail -f myfile.txt &
$ rm myfile.txt

myfile.txt หายไปแล้ว แต่ inode นั้นยังคงอยู่โดยคำสั่ง tail หากต้องการรับไฟล์ของคุณก่อนอื่นให้ค้นหา PID ของกระบวนการที่ทำให้ inode อยู่:

$ ps auxw | grep tail
sunny      409  0.0  0.0   8532   824 pts/5    S    18:07   0:00 tail -f myfile.txt

PID คือ 409 chdir ถึง / proc / 409 / fd / และเขียนรายการเนื้อหา:

dr-x------ 2 sunny sunny  0 2009-07-24 18:07:18 .
dr-xr-xr-x 7 sunny sunny  0 2009-07-24 18:07:17 ..
lrwx------ 1 sunny sunny 64 2009-07-24 18:07:33 0 -> /dev/pts/5
lrwx------ 1 sunny sunny 64 2009-07-24 18:07:33 1 -> /dev/pts/5
lrwx------ 1 sunny sunny 64 2009-07-24 18:07:18 2 -> /dev/pts/5
lr-x------ 1 sunny sunny 64 2009-07-24 18:07:33 3 -> /home/sunny/tmp/myfile.txt (deleted)

กระบวนการ / proc / [PID] / fd / ไดเรกทอรี่มีการเชื่อมโยงไปยังไฟล์อธิบายของไฟล์ทั้งหมดที่กระบวนการใช้ ในกรณีนี้ symlink "3" ชี้ไปที่ไฟล์ที่ถูกลบ ดังนั้นหากต้องการกู้คืนไฟล์ให้คัดลอกเนื้อหาไปยังไฟล์ใหม่:

$ cat 3 >/home/mydir/saved_file.txt

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

1
คำตอบที่ดี +1
asdmin

มันไม่ได้ผลสำหรับฉัน เนื่องจาก '3' เป็น symlink ที่ห้อยต่องๆไม่ใช่ตัวอธิบายไฟล์ "ของจริง" มันจะสร้างไฟล์เปล่าขึ้นมาเสมอ
Rob Chanter

4
@Rob: ไม่มันไม่ได้ หากไฟล์ descriptor ถูกใช้งาน symlink จะชี้ไปยังข้อมูลที่ถูกต้องมิฉะนั้น symlink จะไม่มีอยู่ในตำแหน่งแรก เมื่อไฟล์ถูกปิด symlink จะหายไป คุณมีช่องว่างหลังจาก "3" ใช่ไหม ถ้าไม่คุณจะส่งออกเนื้อหาของ file descriptor 3 ในเชลล์ปัจจุบันแทนและนั่นอาจจะว่างเปล่า
sunny256

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


-8

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


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