继续阅读时挂载点,我认为Linux中的文件管理如下:
/
是树的主体/a
是主体的分支,是分支/a/b
的分支/a
- 将分区挂载
c
到挂载点/a/b
意味着“挂”/c
到分支上/a/b
,从而导致/a/b/c
我有一些疑问:
我们可以只挂载整个分区,还是可以挂载该分区的一部分?请详细说明。
我们是否将一个分区安装到另一个已安装的分区上?例如,一些
d
安装在/mnt
,现在我可以安装另一个/e
,d
创建/mnt/d/e
吗?或者我们可以/应该只挂载到“固定分支”,例如/
,/mnt
?如果可以的话,如果我们卸载会发生什么/d
,也会/e
自动卸载吗?我们可以安装到具有不同文件系统的东西上吗?例如,
/a
拥有文件系统 F1,我可以/b
将文件系统 F2 挂载到a
并创建/a/b
吗?假设一个设备
sda
有 2 个分区sda1
,sda2
。在通常的实践中,人们会在他们想要的任何挂载点挂载,例如/sda1
to/a/sda1
、sda2
to/b/c/sda2
,还是挂载到同一目录?在 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),但它们都没有影响在实际结果路径上。
因此,在安装时,您需要提供一个路径(该路径称为安装点并且必须已存在)。文件系统挂载后,它的根此时就可以访问您提供的路径---不是它的子目录。
- 我们可以只挂载整个分区,还是可以挂载该分区的一部分?请详细说明。
理论上,您可以在单个分区上拥有多个文件系统,但是您需要特定的软件才能在那里找到它(truecrypt 用于执行此操作,IIRC)。
如果您只想挂载文件系统的一部分,那么理论上这是可能的,但内核不会这样做。理论上,您可以设计一个仅允许部分安装的文件系统,然后为其编写驱动程序,但我想这将是困难和不可能的。 AFAIK,没有一个常用的文件系统支持这一点。
- 我们是否将一个分区安装到另一个已安装的分区上?
是的,你可以做到。您可以在同一路径上挂载任意数量的文件系统,并以任意顺序卸载它们。不过,只能访问最后安装的文件系统。
实际上,出于安全原因,某些程序通常会这样做:安装文件系统,在其上打开文件,然后在同一路径上安装其他内容。现在没有其他进程可以访问第一个文件。
例如,某些 d 安装在 /mnt 上,现在我可以将另一个 /e 安装到 d 上,创建 /mnt/d/e 吗?或者我们可以/应该只挂载到“固定分支”,例如 /, /mnt ?如果可能的话,如果我们卸载/d会发生什么,/e也会自动卸载吗?
如果您在 /mnt 上挂载一个文件系统,并且该文件系统恰好包含例如。目录'foo',那么你可以使用这个目录来挂载另一个文件系统。但内核不会让您卸载正在使用的文件系统。打开文件、将进程 chdir 到目录以及使用目录作为挂载点都算作“正在使用”。
挂载到“固定分支”,例如 /,
哦,顺便说一下,永远不能做这个。不要安装任何东西直接地到 /;这很可能会立即破坏您的系统。
- 我们可以挂载到具有不同文件系统的东西上吗
是的。事实上,对于任何常见的发行版,当您进入登录屏幕时,您已经在 / 下的某处安装了大约 5 个不同的文件系统(嘿,现在我的 Fedora 盒子上有 16 个)。
运行mount
以查看当前安装了哪些文件系统。
- 假设一个设备 sda 有 2 个分区 sda1、sda2。在通常的实践中,人们会挂载在他们想要的任何挂载点,例如 /sda1 到 /a/sda1 , sda2 到 /b/c/sda2 ,还是挂载到同一目录?
据我记得,唯一的要求是安装点(即目录)必须已经存在。除此之外,您可以想出任何适合您需要的方案。文件系统位于同一磁盘上这一事实并不构成任何限制。
毕竟,您甚至可以稍后将文件系统移动到不同的介质并重新安装它。例如,如果磁盘出现故障或者您需要更多空间,您就会这样做。
关于命名,问题在于为什么首先需要文件系统。通常有一个单独的(大型)文件系统仅用于用户主目录。主目录的自然位置是 /home,因此技巧是将文件系统挂载到此路径。对于服务器来说,以这种方式分隔 /var 通常是有利的。但如果您只想要一个单独的存储,您始终可以将其安装到任何未使用的路径(例如/finance),只要该路径是唯一的并且对您的用户有意义(我猜/sda1不会是,而是YMMV;)) 。
- [...]我如何创建一些虚拟或临时分区/文件系统来测试和学习安装和安装点?
请参阅Archemar 的回答。 (顺便说一句,它应该适用于任何常见的 GNU/Linux 发行版,而不仅仅是 Fedora 22。)
答案2
这个范围很广
- 本地分区作为一个整体挂载。您不能部分安装它。
- 您可以(通常会做很多事情)将分区挂载到其他分区上。现有数据是“隐藏”的(例如, 当您在 上挂载“b”时,文件
foo.txt
in被隐藏)/mnt/a/b/foo.txt
/mnt/a/b
- 是的,你可以,它建议将本地挂载到本地,将远程挂载到远程或本地,但是你可以将本地 ext3 挂载到 nfs 上,挂载到 ext3 上...
- 这取决于你的需要。
- 除非在 /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 )