不同分区和不同文件系统的挂载点

不同分区和不同文件系统的挂载点

继续阅读时挂载点,我认为Linux中的文件管理如下:

  • /是树的主体
  • /a是主体的分支,是分支/a/b的分支/a
  • 将分区挂载c到挂载点/a/b意味着“挂”/c到分支上/a/b,从而导致/a/b/c

我有一些疑问:

  1. 我们可以只挂载整个分区,还是可以挂载该分区的一部分?请详细说明。

  2. 我们是否将一个分区安装到另一个已安装的分区上?例如,一些d安装在/mnt,现在我可以安装另一个/ed创建/mnt/d/e吗?或者我们可以/应该只挂载到“固定分支”,例如//mnt?如果可以的话,如果我们卸载会发生什么/d,也会/e自动卸载吗?

  3. 我们可以安装到具有不同文件系统的东西上吗?例如,/a拥有文件系统 F1,我可以/b将文件系统 F2 挂载到a并创建/a/b吗?

  4. 假设一个设备sda有 2 个分区sda1, sda2。在通常的实践中,人们会在他们想要的任何挂载点挂载,例如/sda1to /a/sda1sda2to /b/c/sda2,还是挂载到同一目录?

  5. 在 Linux(例如 Fedora 22)中,如何创建一些虚拟或临时分区/文件系统来测试和学习安装和安装点?

答案1

第一:你没有挂载分区。安装的东西是文件系统。文件系统可能位于某个分区上,但事实并非如此;文件系统通常存在:

  • 内部文件(例如 ISO 映像),

  • 完全在 RAM 中(例如 /tmp 有时以这种方式创建),

  • 在内核内部(/sys 和 /proc 以这种方式工作),

  • 或作为网络服务(NFS 和 Samba 以这种方式工作)。

将分区 c 挂载到挂载点 /a/b 意味着将 /c “挂”到 /a/b 分支上,从而产生 /a/b/c

这是不正确的。

首先,有很多方法可以引用文件系统(例如,最常见 - 在大多数情况下最安全 - 方法是使用 UUID,尝试lsblk -o +UUID,LABEL以普通用户身份运行以查看内核知道的 ID),但它们都没有影响在实际结果路径上。

因此,在安装时,您需要提供一个路径(该路径称为安装点并且必须已存在)。文件系统挂载后,它的根此时就可以访问您提供的路径---不是它的子目录。

  1. 我们可以只挂载整个分区,还是可以挂载该分区的一部分?请详细说明。

理论上,您可以在单个分区上拥有多个文件系统,但是您需要特定的软件才能在那里找到它(truecrypt 用于执行此操作,IIRC)。

如果您只想挂载文件系统的一部分,那么理论上这是可能的,但内核不会这样做。理论上,您可以设计一个仅允许部分安装的文件系统,然后为其编写驱动程序,但我想这将是困难和不可能的。 AFAIK,没有一个常用的文件系统支持这一点。

  1. 我们是否将一个分区安装到另一个已安装的分区上?

是的,你可以做到。您可以在同一路径上挂载任意数量的文件系统,并以任意顺序卸载它们。不过,只能访问最后安装的文件系统。

实际上,出于安全原因,某些程序通常会这样做:安装文件系统,在其上打开文件,然后在同一路径上安装其他内容。现在没有其他进程可以访问第一个文件。

例如,某些 d 安装在 /mnt 上,现在我可以将另一个 /e 安装到 d 上,创建 /mnt/d/e 吗?或者我们可以/应该只挂载到“固定分支”,例如 /, /mnt ?如果可能的话,如果我们卸载/d会发生什么,/e也会自动卸载吗?

如果您在 /mnt 上挂载一个文件系统,并且该文件系统恰好包含例如。目录'foo',那么你可以使用这个目录来挂载另一个文件系统。但内核不会让您卸载正在使用的文件系统。打开文件、将进程 chdir 到目录以及使用目录作为挂载点都算作“正在使用”。

挂载到“固定分支”,例如 /,

哦,顺便说一下,永远不能做这个。不要安装任何东西直接地到 /;这很可能会立即破坏您的系统。

  1. 我们可以挂载到具有不同文件系统的东西上吗

是的。事实上,对于任何常见的发行版,当您进入登录屏幕时,您已经在 / 下的某处安装了大约 5 个不同的文件系统(嘿,现在我的 Fedora 盒子上有 16 个)。

运行mount以查看当前安装了哪些文件系统。

  1. 假设一个设备 sda 有 2 个分区 sda1、sda2。在通常的实践中,人们会挂载在他们想要的任何挂载点,例如 /sda1 到 /a/sda1 , sda2 到 /b/c/sda2 ,还是挂载到同一目录?

据我记得,唯一的要求是安装点(即目录)必须已经存在。除此之外,您可以想出任何适合您需要的方案。文件系统位于同一磁盘上这一事实并不构成任何限制。

毕竟,您甚至可以稍后将文件系统移动到不同的介质并重新安装它。例如,如果磁盘出现故障或者您需要更多空间,您就会这样做。

关于命名,问题在于为什么首先需要文件系统。通常有一个单独的(大型)文件系统仅用于用户主目录。主目录的自然位置是 /home,因此技巧是将文件系统挂载到此路径。对于服务器来说,以这种方式分隔 /var 通常是有利的。但如果您只想要一个单独的存储,您始终可以将其安装到任何未使用的路径(例如/finance),只要该路径是唯一的并且对您的用户有意义(我猜/sda1不会是,而是YMMV;)) 。

  1. [...]我如何创建一些虚拟或临时分区/文件系统来测试和学习安装和安装点?

请参阅Archemar 的回答。 (顺便说一句,它应该适用于任何常见的 GNU/Linux 发行版,而不仅仅是 Fedora 22。)

答案2

这个范围很广

  1. 本地分区作为一个整体挂载。您不能部分安装它。
  2. 您可以(通常会做很多事情)将分区挂载到其他分区上。现有数据是“隐藏”的(例如, 当您在 上挂载“b”时,文件foo.txtin被隐藏)/mnt/a/b/foo.txt/mnt/a/b
  3. 是的,你可以,它建议将本地挂载到本地,将远程挂载到远程或本地,但是你可以将本地 ext3 挂载到 nfs 上,挂载到 ext3 上...
  4. 这取决于你的需要。
  5. 除非在 /etc/fstab 中写入,否则挂载点在启动时消失。

您可以使用以下命令创建临时设备和安装点

  • dd if=/dev/zero count=100 bs=1K of=foo,

  • 然后mkfs -t ext3 foo

  • 然后,作为 root,mount foo /mnt

    完成后卸载/mnt并删除。foo

按要求。

你有 /dev/sda1 /dev/sda2

ls /mnt
#empty
mount /dev/sda1 /mnt/a
error mount point doesn't exist (1)
mkdir /mnt/a 
mount /dev/sda1 /mnt/a
ls /mnt
a
ls /mnt/a
# empty
mkdir /mnt/a/b
date > /mnt/a/b/foo.txt
mount /dev/sda2 /mnt/a/b
ls /mnt/a/b
# empty
umount /mnt/a
device busy (2) 
date > /mnt/a/b/bar.txt
ls /mnt/a/b
bar.txt
umount /mnt/a/b
ls /mnt/a/b
foo.txt
  • (1) 必须安装在现有目录上。
  • (2) /mnt/a 无法卸载,因为有一个挂载点正在使用它 (/mnt/a/b )

相关内容