如何删除没有inode的目录项(文件)?

如何删除没有inode的目录项(文件)?

这一定是我无法理解的奇怪现象之一,使用chromium浏览器时不时地会产生一个inode名为Preferences.

如果我在终端中执行此操作:

$> ls -i ~/.config/chromium/Default/ | grep Preferences

我收到这个输出

ls: cannot access '~/.config/chromium/Default/Preferences': No such file or directory
       ? Preferences
10551098 Secure Preferences

输出在第一行显示该文件不存在,但它仍然在第二行显示为目录条目。第三行仅显示,因为碰巧还有 grep Preferences 也过滤了该条目。

现在的问题,如标题所述,主要是:“如何删除这个目录项”?

一些附加信息:os/distro 当前 Arch Linux,文件系统:btrfs。

我过去曾从 live-usb 拇指驱动器启动并btrfs check使用相应的标志运行 a,发现问题并解决了它。然而现在我还没有准备好这样的驱动器。因此,我最感兴趣的是清理目录条目的不同方法,该目录条目不再有关联的索引节点。

也许 btrfs 可以“在线”做到这一点?

答案1

不幸的是,目前在 BTRFS 上执行此操作的唯一方法是使用btrfs check.过去曾有过一些关于添加条款来处理此问题的讨论,但它并没有真正消失(至少,不是公开的,我不知道任何任意开发人员可能正在做什么)。

然而,有一些更复杂的替代方案可以使用 USB 驱动器离线执行此操作,例如:

  1. 如果您同时使用 initramfs 和 Systemd,您应该能够告诉 systemd 在挂载真正的根文件系统并放入 shell 之前停止引导过程。不幸的是,我不记得如何做到这一点(我自己不使用 systemd,所以它从来没有真正出现在我身上),但如果你能弄清楚的话,这可能是最简单的选择,因为这会给你一个(大多数)完整的系统恢复环境。
  2. 通常可以在硬盘驱动器上设置 Live USB 或 Live CD 系统的本地副本。这是我采取的方法,从系统救援光盘ISO 并将它们放入我的引导分区中(在我的例子中,使用一个条目更新引导加载程序,但如果您使用 os-prober 应该会自动拾取它)。确切的文件集因 Live 系统而异,但对于 SystemRescueCD,您需要其中一个内核、initramfs 映像、sysrcd.dat 和 sysrcd.md5。
  3. 如果您有时间和耐心来保持最新状态,您可以使用构建根或类似的工具来组合一个可直接由引导加载程序加载的映像,并完全从 RAM 运行,独立于系统的其余部分。然后,您可以捆绑任何您想要的恢复工具(例如 btrfs-progs),并在需要执行此类操作时启动该工具(这需要花费最多的精力,但使用的空间比选项 2 少,并且比选项 1 更可靠) )。
  4. 在某些发行版上,您可以非常轻松地创建一个备份根分区,其中包含修复主分区所需的内容。但这确实很复杂,而且要保持最新状态也不是最容易的事情。然而 Debian 和 Gentoo 使这变得非常简单(Debian 有用于初始设置的工具,并且可以在 chroot 中可靠地运行更新,Gentoo 做这样的事情很简单,甚至不需要 chroot 来更新(因为你可以将emerge指向任意目录以将其视为根目录))。

相关内容