我安装了一个带有Ubuntu14.04.5的设备,它有一个带有ext4文件系统的硬盘驱动器。
通过阅读文档Ext4 4文件系统,我了解到默认的数据模式是ordered,它只保护元数据。在我的项目中,我们希望将其更改为journal,以保护文件数据,因为数据安全具有更高的价值。
我尝试的第一件事是修改/etc/fstab文件。我试着改变
UUID= / ext4 errors=remount-ro 0 1至
UUID= / ext4 errors=remount-ro,data=journal 0 1通过将data=journal附加到选项字段。
然而,当我重新启动设备时,我最终得到了一条错误消息,上面写着cannot change data mode on remount。我检查了dmesg,并看到了一条关于用ordered数据模式挂载驱动器的早期消息。
在令人尴尬的长时间内,我认为/etc/fstab被用来覆盖默认的安装选项,所以驱动器只能挂载一次。但是现在看起来是错误的:驱动器是使用其默认的挂载选项挂载的,然后选择/etc/fstab重新挂载它。
My问题是:
Fstabwiki页面,但没有看到它提到“挂载-重装”的事情。/etc/fstab真正用于重新安装,那么引导过程的哪个步骤是首次安装的驱动器?它是在/etc/init.d中实现的吗?我在/etc/init.d中确实看到了一些名为umountfs和umountroot的脚本,但是浏览它们的内容时,它们看起来并不相关。发布于 2019-01-09 15:54:30
如果您运行sudo strace -e open,openat mount -o remount,rw /,您将看到该命令实际上打开了/etc/fstab。这是您将看到的最常见的命令,经常在关于从恢复shell工作的文章中引用。
还要引用苏尔塞杰迪的回答 (来自mount(8)手册):
在这个调用之后,-o重新挂载,rw /dir,mount读取fstab并将这些选项与命令行(-o)中的选项合并。如果在fstab中没有找到挂载点,则允许使用未指定源的重新装入。
然而,这并不意味着/etc/fstab总是被使用。特别是,当您还指定设备文件时,引用mount(8)手册:
重新挂载功能遵循挂载命令如何使用fstab中的选项的标准方式。这意味着只有在设备和dir完全指定时,挂载命令才会读取fstab (或mtab)。挂载-o重新挂载,rw /dev/foo /dir在这次调用之后,所有旧的挂载选项都被替换了,除了由<#>and命令内部生成和维护的loop=选项之外,fstab中的任意内容被忽略了。
这是有意义的,因为/dir可能是任意的--将设备重新安装到不同的挂载点。
在引导时挂载/etc/fstab文件系统时,内核也不了解/etc/fstab。引用psusi的回答的话:
最终,引导加载器出现了,可以将命令行传递给内核。如果传递了root=参数,就会告诉内核根fs的位置,而不是内置的值。需要访问的驱动程序仍然必须内置到内核中..。最后,今天我们有了initramfs。这与initrd类似,但它不是加载到ramdisk中的压缩文件系统映像,而是压缩的cpio存档。一个tmpfs作为根挂载,并在那里提取存档。不使用被视为脏黑客的pivot_root,initramfs引导脚本在/root中挂载真正的根,删除tmpfs根中的所有文件,然后将chroot放入/root和exec /sbin/init。
不需要fstab的
/etc/fstab。这就是/proc的例子--它是一个虚拟文件系统,它主要公开有关进程的信息,以及一些关于硬件和系统的东西,它们实际上应该在/sys中--另一个虚拟文件系统。https://askubuntu.com/questions/1108320
复制相似问题