是否可以通过将 File1 的索引节点号作为参数而不是文件名传递来stat
检索元数据?File1
stat
stat [option - any doing this?] [inode number of File1]
代替
stat /home/$USER/File1
我的意思是直接的,而不是使用任何管道和命令替换技巧。
是否可以通过将 File1 的索引节点号作为参数而不是文件名传递来stat
检索元数据?File1
stat
stat [option - any doing this?] [inode number of File1]
代替
stat /home/$USER/File1
我的意思是直接的,而不是使用任何管道和命令替换技巧。
有没有办法准确找到分配给 inode 的块,并查看该文件?我不在乎我是否必须在现场 CD 上,但我需要这样做,例如:
cat verylongsentice > a
ls -i a
101010 a
ln a /some/random/path
rm a
inode_find 101010
verylongsentice
有什么办法吗?也许作为 root 或从 live CD?我不关心文件名。删除的文件也可以吗?
我有一个文件系统,其中包含许多我定期擦除的小文件(这些文件是可以轻松重新生成的缓存)。rm -rf
简单地创建一个新的文件系统而不是运行或rsync
删除所有文件(即有效地删除包含数千个文件的大目录)要快得多。
创建一个新的文件系统来擦除文件系统的唯一问题是它的 UUID 发生了变化,导致例如/etc/fstab
.
有没有办法简单地从例如 ext4 文件系统中“取消链接”一个目录,或者完全清除它的 inode 列表?
此问题与 Samba 有关,不需要 inode。
我在处理某个包含一些特殊字符的文件时遇到问题。如果我按它搜索它,inode
它将列出该文件:
$ find . -inum 90505400 -exec ls {} \;
./12 String Quartet No. 16 in F Major Op. 135: Der schwer gefa?te Entschlu?: Grave, ma non troppo tratto (Mu? es sein ?) - Allegro (Es mu? sein !).flac
但是,如果我继续使用cp
或rm
在文件上,它会抛出一个file not found
错误(在德语'Datei oder Verzeichnis nicht gefunden'):
$ find . -inum 90505400 -exec cp {} ne.flac \;
cp: './12 String Quartet No. 16 in F Major Op. 135: Der schwer gefa?te Entschlu?: Grave, ma non troppo tratto (Mu? es sein ?) - Allegro (Es mu? sein !).flac' kann nicht zum Lesen geöffnet werden: Datei oder Verzeichnis nicht gefunden
我想知道,我是否可以使用另一个直接使用 inode 的命令来复制文件。我也有这个问题一段时间了。我可以使用 删除所有文件rm *
,但我想修复损坏的文件名。
这是一个ext4
文件系统,我使用此行从外部 USB 硬盘安装在 Raspi 上(更改了混淆路径和 IP):
UUID=e3f9d42a-9703-4e47-9185-33be24b81c46 /mnt/test ext4 rw,auto,defaults,nofail,x-systemd.device-timeout=15 0 2
然后我与 samba 分享它:
[mybook]
path=/mnt/test
public = yes
browseable = yes
writeable = yes
comment = test
printable = no
guest ok = no
我将它安装在 Lubuntu 16 上:
//192.168.1.190/test /home/ben/test cifs auto,nofail,username=XXX,password=XXX,uid=1000,gid=1000
VNC
我通过Macbook连接到 Lubuntu 16 。或者我SSH
直接进去。我只是告诉这个以获得完整的信息。
我还将共享安装在 Finder 中的那台 Macbook(和其他)上。Finder 无法正确显示文件名。
SSH
进入主机会显示此文件名(查看0xF022
“135”之后的符号):
'12 String Quartet No. 16 in F Major Op. 135 Der schwer gefa?te Entschlu? Grave, ma non troppo tratto (Mu? es sein ) - Allegro (Es mu? sein !).flac'
然后,我能够cp
在主机本身上复制文件。
flac
(如果有人想知道我是如何得到文件名的:我将一个带有表格的汇总文件拆分cue
为单独的文件,它们会自动命名。)
我们正在使用 Logstash 来摄取我们的日志,并且由于 inode 被重用,我们正面临一些问题。我们在 Logstash 方面尝试了所有可能的选项,因此我们正在探索操作系统方面。
据我所见,如果我创建一个文件,将其删除,然后再创建一个新文件,大多数情况下它将获得相同的 inode
[root@XXXX~]# touch a.txt
[root@XXXX~]# stat -c%i a.txt
671092802
[root@XXXX~]# rm a.txt
rm: remove regular empty file ‘a.txt’? y
[root@XXXX~]# touch a.txt
[root@XXXX~]# stat -c%i a.txt
671092802
[root@XXXX~]# rm a.txt
rm: remove regular empty file ‘a.txt’? y
[root@XXXX~]# touch b.txt
[root@XXXX~]# stat -c%i b.txt
671092802
如何防止带有 XFS 的操作系统将最近使用的 inode 重用于新文件?
理想情况下,我们希望定义从文件被删除到 inode 被重用之间的时间段。磁盘很大,所以我们预计问题不会达到 inode 限制。
谢谢
我们有一个 inode 编号,我们试图将其与实际文件名相关联。文件系统是 XFS。看看有一些示例声称能够通过xfs_db
和/或来实现这一点,xfs_ncheck
但到目前为止,我们还没有成功地做到这一点。
我们正在分类一个问题,我们希望找到与 inode 编号相关联的文件名,这些文件名显示在 .procsfdinfo
文件中/proc
。
$ grep inotify /proc/9652/fdinfo/23 | head
inotify wd:58eb9 ino:cfd30c7 sdev:20 mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:c730fd0c00000000
inotify wd:58eb8 ino:cfd1f09 sdev:1e mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:091ffd0c00000000
inotify wd:58eb7 ino:cfd1ee9 sdev:1a mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:e91efd0c00000000
inotify wd:58eb6 ino:cfd1ec8 sdev:1c mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:c81efd0c00000000
inotify wd:58eb5 ino:cfd1eb9 sdev:19 mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:b91efd0c00000000
inotify wd:58eab ino:cfd24cf sdev:20 mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:cf24fd0c00000000
inotify wd:58eaa ino:cfdbc51 sdev:1e mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:51bcfd0c00000000
inotify wd:58ea9 ino:cfdbc31 sdev:1a mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:31bcfd0c00000000
inotify wd:58ea8 ino:cfdbc0f sdev:1c mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:0fbcfd0c00000000
inotify wd:58ea7 ino:cfdb000 sdev:19 mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:00b0fd0c00000000
这些 inode 采用 HEX 格式,因此我们需要将它们转换为 DEC:
$ echo $((16#cfd30c7))
217919687
使用xfs_ncheck
:
$ xfs_ncheck -i $(echo $((16#cfd30c7))) /dev/mapper/vg0-dockerlv
ERROR: The filesystem has valuable metadata changes in a log which needs to
be replayed. Mount the filesystem to replay the log, and unmount it before
re-running xfs_ncheck. If you are unable to mount the filesystem, then use
the xfs_repair -L option to destroy the log and attempt a repair.
Note that destroying the log may cause corruption -- please attempt a mount
of the filesystem before doing this.
must run blockget -n first
我有 3 台计算机,A、B 和 C,我在它们上执行相同的操作系统和软件安装。对于 A 上的任何特定文件,我是否可以期望 B 和 C 上的同一个文件对于该文件的实例具有相同的 inode 号?
我们的入侵检测系统是通过从 A 获取初始文件系统映像,然后使用相同的文件系统映像与 A、B 和 C 进行未来比较来建立的。我是该程序的新手,但似乎这已经奏效在过去。
我不知道 inode 编号排序是如何工作的,所以我猜它只是从 1 开始并为每个文件计数,或者类似的东西。如果是这样的话,这可能就是为什么文件 inode 编号在过去对我们来说甚至在计算机之间都是一致的 - 相同的文件是以相同的顺序创建的。虽然我不确定我们是否总是可以指望这一点。
但是,现在我收到了一些文件更改的通知,对于我正在查看的第一个文件,只有文件 inode 编号已更改。我认为有人在通知中重新安装了计算机上的操作系统和软件。
在不同计算机上安装相同的操作系统/软件(或在同一台计算机上按顺序重新安装),文件 inode 编号是否可以被视为相同?
如果我要从 A、B 或 C 中获取一个新的文件系统映像,我能否期望它能够解决我的“问题”(甚至不确定这是否是一个问题)?
我通常一次只能访问 1 或 2 台计算机,所以我现在无法检查 A 或 C,我不知道他们的报告会是什么样子。我只知道计算机B上至少1个文件的inode数量不是预期的。
在这种情况下,操作系统是 QNX 6。对于文件系统类型,mount
告诉我 /dev/hd 文件是“on / type qnx4”...所以文件系统类型 qnx4?我猜qnx有自己的文件系统类型?我没有意识到这一点。或者也许这不准确。计算机上似乎不存在其他用于检查文件系统类型的命令。
更新:显然我错了。尽管我们关于文件系统原始状态的参考数据确实包含文件的 inode 编号,并且我可以选择将其包含在测试中,但我不应该在问题中描述的此检查中包含 inode 数据,并且“它在过去有效”就是因为这个。所以我实际上并不需要我在这里要求的东西,对此感到抱歉。不过,我将保留这个问题,因为我仍然觉得它很有趣,并且在评论中已经开始了部分答案。
我从 Windows 机器的 SMB 共享中删除了一个文件夹。由于零确认,整个文件夹被删除。首先运行photorec,它提取了除 1 之外的大部分文件,这是最后一个复制的文件。使用extundelete进行的进一步测试能够将整个文件夹减去 4-5 个文件。然而,一个最重要的文件再次没有恢复。查看索引节点,我可以看到恢复的文件具有顺序索引节点。所以我能够缩小确切的inode。但是,我得到以下尝试恢复该特定 inode。
Loading filesystem metadata ... 59613 groups loaded.
Loading journal descriptors ... 29932 descriptors loaded.
Unable to restore inode 60596808 (file.60596808): No undeleted copies found in the journal.
但是,当我搜索该 inode 时,我确实得到了数据:
Loading filesystem metadata ... 59613 groups loaded.
Group: 14794
Contents of inode 60596809:
0000 | e4 81 e8 03 dd df b2 1b 43 2d 08 5d 53 2d 08 5d | ........C-.]S-.]
0010 | fd 97 05 5d 53 2d 08 5d e8 03 00 00 00 00 00 00 | ...]S-.]........
0020 | 00 00 08 00 01 00 00 00 0a f3 00 00 04 00 00 00 | ................
0030 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0040 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0050 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0060 | 00 00 00 00 70 57 ff 3f 00 00 00 00 00 00 00 00 | ....pW.?........
0070 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0080 | 20 00 00 00 ec e9 88 2a b0 16 cf 0f 1c 76 bb a2 | ......*.....v..
0090 | 3c 2d 08 5d d4 64 6c a9 00 00 00 00 00 00 00 00 | <-.].dl.........
00a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
00b0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
00c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
00d0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
00e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
00f0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
Inode is Unallocated
File mode: 33252
Low 16 bits of Owner Uid: 1000
Size in bytes: 464707549
Access time: 1560816963
Creation time: 1560816979
Modification time: 1560647677
Deletion Time: 1560816979
Low 16 bits of Group Id: 1000
Links count: 0
Blocks count: 0
File flags: 524288
File version (for NFS): 1073698672
File ACL: 0
Directory ACL: 0
Fragment address: 0
Direct blocks: 62218, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
Indirect block: 0
Double indirect block: 0
Triple indirect block: 0
使用debugfs我试图转储 inode,但我得到的只是一个大小正确但归零的文件。
以字节、日期为单位的大小,我 99% 确定这是我需要的确切 inode 文件。这些数据基本上是缺少指向磁盘上确切位置的指针的存根吗?反正有没有使用这个inode数据来恢复实际数据?