![当您“安装”驱动器时究竟发生了什么?](https://linux22.com/image/1359127/%E5%BD%93%E6%82%A8%E2%80%9C%E5%AE%89%E8%A3%85%E2%80%9D%E9%A9%B1%E5%8A%A8%E5%99%A8%E6%97%B6%E7%A9%B6%E7%AB%9F%E5%8F%91%E7%94%9F%E4%BA%86%E4%BB%80%E4%B9%88%EF%BC%9F.png)
当您安装驱动器时,底层会发生什么?即使驱动器未安装,计算机也可以看到它(例如 sudo fdisk -l / diskutil -list)。当驱动器安装时,所发生的一切是操作系统为设备提供路径,还是发生了一些文件系统“魔法”?
答案1
文件系统发生了一些“魔法”。
把磁盘系统分成几层可能会有帮助。最底层是块设备,最上层是分区,最上层是文件系统。
当驱动器被挂载时,挂载程序会与内核以及可能的 /etc/fstab 一起确定分区上的文件系统类型,然后(通过内核调用)实现标准文件系统调用以允许操作文件系统,包括读取、写入、列出、权限等。
事实上,您可以轻松地向其中添加其他层,并且它们的工作方式都相同。(一种常见的层是 LVM,它位于分区和文件系统之间,允许您调整大小、添加和删除磁盘,即使在正在运行的文件系统上也是如此)。我提到这一点是因为它表明它不仅仅是提供设备路径。
同样,不同的内核将支持不同的文件系统(例如,有些内核可能包括 ReiserFS、btrfs 等)。还可以使用“用户空间”(fuse)中的文件实现文件系统(仍然可以挂载和卸载)。例如,这将允许挂载不属于内核的虚拟文件系统,甚至是虚拟文件系统 - 例如,我已经挂载了 FTP 目录,甚至通过 ssh 挂载了远程路径作为文件系统(当然还有 NFS 和 SAMBA 共享),以及加密文件,并将多个目录合并为一个统一的文件系统 - 所有这些都是通过内核完成的“魔法”,通常是在 mount 命令的帮助下完成的。
答案2
从块设备挂载文件系统时,将进行几项准备,包括
- 读取每个文件系统的信息,如文件系统类型、版本、选项、可用空间量……
- 检查文件系统上次是否正确关闭(卸载)
- 检查块设备是否只读(软盘/SD卡开关,CDROM/DVD)。
- 重放文件系统“日志”中记录的操作(如果有)。
答案3
当你挂载 Linux 文件系统(如 ext2、ext3、ext4 等)时,文件系统超级块的副本将驻留在内存中,以便进行进一步的操作