当您“挂载”带有内容的现有文件夹时会发生什么?

用户

现在/tmp有一些临时文件。当我将硬盘驱动器(/dev/sdc1安装在上时/tmp,可以看到硬盘驱动器上的文件。/tmp装入硬盘驱动器后的实际内容如何处理?可以在/tmp安装硬盘驱动器时对实际内容执行读/写操作吗?

python@lanix / $ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       286G   43G  229G  16% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            3.8G  4.0K  3.8G   1% /dev
tmpfs           766M  1.4M  765M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            3.8G   38M  3.8G   1% /run/shm
none            100M   24K  100M   1% /run/user
/dev/sdb1       7.5G  2.7G  4.9G  35% /mnt
/dev/sdc1       932G  242G  691G  26% /tmp

装入硬盘驱动器后,/ tmp的实际内容如何处理?

几乎没有。它们只是从视图中隐藏起来,无法通过正常的文件系统遍历来访问。

装入硬盘驱动器后,是否可以对/ tmp的实际内容执行读/写操作?

是的。在“原始”文件中具有打开文件句柄的进程/tmp将继续能够使用它们。您还可以通过在其他位置绑定安装来使“重新出现”/在其他位置。

# mount -o bind / /somewhere/else
# ls /somewhere/else/tmp  

您可以进行以下实验,以对发生的事情有更好的感觉(我希望)。

注意:这不是试图完全正确,也不是对真实情况的详尽描述。应该足够准确,但是可以为您提供全面的信息。

我在me计算机上创建了一个名为的用户,并在其家中创建了一个随机目录,其中包含一个文件:

me@home $ pwd
/home/me/tmp
me@home $ echo hello > some_file
me@home $ ls  
some_file
me@home $ cat some_file 
hello

在这一点上,没有什么不寻常的-它只是一个带有纯文件的纯目录。我将会话保持cwd其打开状态,并保留在该测试目录中。

以root身份,我创建了一个小文件系统并将其挂载到/home/me/tmp

root@home # dd if=/dev/zero of=./fs bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.00467318 s, 2.2 GB/s

root@home # mkfs -t ext2 ./fs 
mke2fs 1.42.12 (29-Aug-2014)
[... snip ...]
Writing superblocks and filesystem accounting information: done

root@home # mount ./fs /home/me/tmp

然后,我打开一个新的终端me,并环顾四周:

me@home #2 $ cd tmp
me@home #2 $ ls
lost+found
me@home #2 $ cat some_file
cat: some_file: No such file or directory
me@home #2 $ echo bye bye > some_file
-su: some_file: Permission denied

因此,我们创建的文件显然不存在。lost+found目录指示ext文件系统的根目录。而且我失去了写许可,所以它显然不是原始目录。

回到第一节me,让我们看一下它如何看待世界:

me@home $ echo something else > other_file

写作没问题。

me@home $ cat some_file other_file 
hello
something else

原始文件仍然存在,创建的新文件没有问题。

??这是怎么回事?

第一个会话通过根目录在其上挂载另一个文件系统之前进入了目录。挂载操作根本不影响原始文件系统。Shell进程对原始文件系统中的目录具有完全有效的句柄,并且可以继续与其进行交互。有点像 地毯 安装点下面跑来跑去

放置挂载后,第二个会话进入目录。因此,它将看到新的空文件系统。并且sysadmin授予了权限,因此它无法使用请求的空间...让我们对其进行修复。

root@home # chown me:users /home/me/tmp
me@home #2 $ echo bye bye > some_file
me@home #2 $ ls 
lost+found  some_file
me@home #2 $ cat some_file 
bye bye

会议1可以从地毯下面逃脱吗?(越来越发霉了。)

当然!如果会话1将文件系统树移出挂载,它将丢失该句柄到内部,并将像其他所有人一样跟随挂载。

me@home $ cd
me@home $ pwd
/home/me
me@home $ cd tmp
me@home $ cat some_file other_file
bye bye
cat: other_file: No such file or directory

与会话2的观点相同,我们已恢复正常。

但是您怎么知道文件没有消失呢?没人在看了!

那是绑定安装变得方便的时刻之一。它们使您可以将已经安装的文件系统挂载到其他位置。

me@home $ mkdir ~/bind
root@home # mount -o bind /home/me /home/me/bind

(是的,您可以“内部安装”文件系统。很酷的技巧,是吗?)

me@home $ ls bind/tmp
other_file  some_file
me@home $ cat bind/tmp/*
something else
hello

因此,他们确实在那里,已准备好采取行动。只是因为它们在其原始位置不可见/无法访问,所以挂载会将它们从常规目录遍历中隐藏起来。


我鼓励您尝试一下,一旦您了解了所玩的“技巧”,它实际上并不复杂。一旦您获得了Got It™,就可以查看并集文件系统以获取更多的地毯信息:-)

不过需要注意的是:引导过程完成后,将文件挂载到/tmp/var(或任何核心OS目录)确实不是一个好主意。许多应用程序在这些目录中保留状态,如果您在它们周围玩坐骑游戏,可能会感到非常困惑。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当您重新声明angular中的现有指令时会发生什么?

来自分类Dev

在现有变量上调用malloc时会发生什么?

来自分类Dev

Java删除,编辑和更改文件夹中的文件时会发生什么?

来自分类Dev

Windows 7-删除AppData文件夹时会发生什么?

来自分类Dev

当您写入具有相同配置的寄存器时会发生什么?

来自分类Dev

使用另一个(现有)对象创建新对象时会发生什么?

来自分类Dev

如果未在res文件夹中放置所有可能大小的图标,会发生什么情况?

来自分类Dev

当您用尽PID时会发生什么?

来自分类Dev

在JavaScript中声明带有几个empy元素的数组时会发生什么

来自分类Dev

当有多个emacs初始化文件时会发生什么?

来自分类Dev

当有多个emacs初始化文件时会发生什么?

来自分类Dev

当有人拉着我推时会发生什么?

来自分类Dev

当有人拉着我推时会发生什么?

来自分类Dev

当Java中有多个main方法时会发生什么?

来自分类Dev

无法运行带有挂载文件夹的 docker 镜像

来自分类Dev

当您删除Windows 10更新文件并尝试重置PC时会发生什么?

来自分类Dev

当我们以root用户身份将文件/文件夹移动到回收站时会发生什么?

来自分类Dev

当我们以root用户身份将文件/文件夹移动到回收站时会发生什么?

来自分类Dev

如何创建一个指向现有文件系统(CentOS)中的文件夹的新挂载点

来自分类Dev

您没有查看“文件夹”的内容所必需的权限

来自分类Dev

您没有查看“文件夹”的内容所必需的权限

来自分类Dev

ROBOCOPY-将文件夹内容复制到带有文件列表的单个文件夹

来自分类Dev

当您从《虚无》中抽奖时会发生什么?

来自分类Dev

当您打开/关闭手柄时会发生什么?

来自分类Dev

当您移到非右值参考时会发生什么?

来自分类Dev

当您使用浏览器返回时会发生什么?

来自分类Dev

当您模糊DOM元素时会发生什么

来自分类Dev

当您“不安装而尝试Ubuntu”时会发生什么?

来自分类Dev

当您调用包含yield的函数时会发生什么?

Related 相关文章

  1. 1

    当您重新声明angular中的现有指令时会发生什么?

  2. 2

    在现有变量上调用malloc时会发生什么?

  3. 3

    Java删除,编辑和更改文件夹中的文件时会发生什么?

  4. 4

    Windows 7-删除AppData文件夹时会发生什么?

  5. 5

    当您写入具有相同配置的寄存器时会发生什么?

  6. 6

    使用另一个(现有)对象创建新对象时会发生什么?

  7. 7

    如果未在res文件夹中放置所有可能大小的图标,会发生什么情况?

  8. 8

    当您用尽PID时会发生什么?

  9. 9

    在JavaScript中声明带有几个empy元素的数组时会发生什么

  10. 10

    当有多个emacs初始化文件时会发生什么?

  11. 11

    当有多个emacs初始化文件时会发生什么?

  12. 12

    当有人拉着我推时会发生什么?

  13. 13

    当有人拉着我推时会发生什么?

  14. 14

    当Java中有多个main方法时会发生什么?

  15. 15

    无法运行带有挂载文件夹的 docker 镜像

  16. 16

    当您删除Windows 10更新文件并尝试重置PC时会发生什么?

  17. 17

    当我们以root用户身份将文件/文件夹移动到回收站时会发生什么?

  18. 18

    当我们以root用户身份将文件/文件夹移动到回收站时会发生什么?

  19. 19

    如何创建一个指向现有文件系统(CentOS)中的文件夹的新挂载点

  20. 20

    您没有查看“文件夹”的内容所必需的权限

  21. 21

    您没有查看“文件夹”的内容所必需的权限

  22. 22

    ROBOCOPY-将文件夹内容复制到带有文件列表的单个文件夹

  23. 23

    当您从《虚无》中抽奖时会发生什么?

  24. 24

    当您打开/关闭手柄时会发生什么?

  25. 25

    当您移到非右值参考时会发生什么?

  26. 26

    当您使用浏览器返回时会发生什么?

  27. 27

    当您模糊DOM元素时会发生什么

  28. 28

    当您“不安装而尝试Ubuntu”时会发生什么?

  29. 29

    当您调用包含yield的函数时会发生什么?

热门标签

归档