我在嵌入式设备上使用 ubuntu(带有 4.4.113 内核的 ubuntu 16.04.4 LTS),并且我在 fstab 中只看到一个条目
/dev/mmcblk0p7 / ext4 errors=remount-ro,noatime,nodiratime 0 1
当我检查使用“mount”命令安装的分区时,我看到安装了很多分区。现在以某种方式自动安装的相关分区是
/dev/mmcblk0p5 on /lib/modules type ext4 (ro,relatime,data=ordered)
我无法弄清楚当 /etc/fstab 中没有条目时它是如何安装的?
答案1
Ubuntu 16.04 使用systemd
它可以为您挂载文件系统。 Ubuntu实际上不再采用/etc/fstab
传统的方式,在系统启动时systemd
会检查每一行/etc/fstab
并为每个条目创建一个mount
systemd
服务。您应该能够运行来查看正在管理的systemctl status *.mount
每个安装的状态。systemd
答案2
所以你有 Ubuntu,但有一些自定义启动脚本。
我猜想挂载很可能是.service
由/etc/systemd/system/
. (根据其他评论,听起来您没有.mount
相应的文件 - 也就是说,您没有文件lib-modules.mount
)。
但安装可能会从许多其他地方开始。它也可能位于.service
中的一个文件中/lib/systemd/system
,其中包含许多您必须查看的文件。它们可能mount
通过运行单独的脚本来间接运行,因此不能保证快速grep mount *.service
找到您要查找的内容。
或者您的供应商可能已记录了对其嵌入式“Ubuntu”映像的自定义修改。
如果没有,有一组方法可以搜索不是来自 Ubuntu 的已修改/创建的文件。
1..deb
没有 apt 源安装的软件包
要搜索没有源直接安装的 .deb 软件包,请运行aptitude search ?obsolete
。 (这还将显示软件包是否是从 apt 源安装的,但不再可以从 apt 源获得。这些软件包将被视为“过时”)。
--https://raphaelhertzog.com/2011/02/07/debian-cleanup-tip-2-get-rid-of-obsolete-packages/
如果您发现一些可疑的包名称,那么您可以列出它们的文件。例如,对于已安装的软件包 foo,请运行dpkg-query -L foo
)。反之亦然,如果您发现可疑文件并想要调查拥有该文件的包,请运行dpkg-query -s /path/to/file
.
2. 从不称自己为“Ubuntu”的 apt 源安装的软件包
要搜索从已启用的 apt 源安装的软件包(该源标榜自己不是 Ubuntu),您可以运行aptitude search '?narrow(?installed, !?origin(Ubuntu))!?obsolete'
.
您还可以通过首先查看源列表来检查警告,使用apt-cache policy
.源的来源显示为o=Ubuntu
。
--https://raphaelhertzog.com/2011/02/14/debian-cleanup-tip-3-get-rid-of-third-party-packages/
作为比较,在 16.04 上,默认的官方来源可能如下所示:
###### Ubuntu Main Repos
deb http://uk.archive.ubuntu.com/ubuntu/ xenial main restricted universe multiverse
###### Ubuntu Update Repos
deb http://uk.archive.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://uk.archive.ubuntu.com/ubuntu/ xenial-updates main restricted universe multiverse
(很难找到合适的文档,所以我从流行的实用程序中获取了它们,https://repogen.simplylinux.ch)。
或者反过来:要搜索与可疑包 foo 关联的源,请运行apt-cache policy foo
3.已安装的包文件被(不当)修改
要检查已安装软件包中文件的修改情况(有充分的理由不修改这些文件,但这是可能的),请安装debsums
并运行debsums -c
.
--https://raphaelhertzog.com/2011/02/21/debian-cleanup-tip-4-find-broken-packages-and-reinstall-them/
4. 未作为包的一部分安装的文件
可以编写脚本来搜索由 apt 包管理之外的其他程序创建的文件。这几乎肯定会出现一些误报。我为此目的查找了一个示例脚本:
(
export LC_ALL=C
comm -23 <(find /etc /lib /bin /sbin /usr -type f | sort) \
<(sort -u /var/lib/dpkg/info/*.list)
)
但是,如果噪音太大,也许最好尝试该cruft
命令,该命令显然具有相同的功能,但知道一些可以安全忽略的文件。 cruft -d "/etc /lib /bin /sbin /usr" --ignore "/usr/local"
。
此处搜索的目录列表有点需要判断。希望 /etc、/usr 和 /lib 应该涵盖大多数 Ubuntu 系统上的引导脚本,例如任何 systemd 配置或 sysvinit 脚本。请注意,就您的情况而言,您希望找到一个非常早期的引导脚本,排除了一些可能的位置。的安装/lib/modules
需要很早就完成,因此可以从中加载内核模块。udev
启动前需要安装。
(另一方面,这增加了 initrd 中存在一些可怕的 hack 的可能性。所以我想要留意 initrd 生成器的修改或替换 - 我认为它被称为initramfs-tools
)。
非常感谢 Raphaël Hertzog,他撰写了本答案中链接的非常有用的一系列博客文章。