超市的网站怎么建设,电子商务网站主要面向,wordpress ajax json,定制柜需要多少钱我们能够根据一个 inode 号在指定分区寻找目标文件的 struct inode#xff0c;也能根据目录文件的内容#xff0c;通过映射关系#xff0c;找指定的 inode#xff0c;可是#xff0c;现在有个问题#xff1a;
问题#xff1a;inode 是不能跨分区使用的#xff01;Linu… 我们能够根据一个 inode 号在指定分区寻找目标文件的 struct inode也能根据目录文件的内容通过映射关系找指定的 inode可是现在有个问题
问题inode 是不能跨分区使用的Linux不是可以有多个分区吗我怎么知道我当前在哪一个分区
这就涉及到分区挂载问题
查看系统分区情况
利用命令查询当前系统的分区情况
命令 ls /dev/vda* 查看当前 Linux 系统中的所有磁盘分区 命令 df -h用于显示文件系统的磁盘空间使用情况。
这里的 -h 选项表示以“人类可读”的格式输出信息显示出系统中每个已挂载的文件系统的总空间、已使用的空间、剩余的空间以及这些文件系统被挂载的位置。 图中的 tmpfs 是临时文件系统暂时不用理会
我们只需关心像 /dev/vda3 这样的文件系统分区 你可以看到/dev/vda3 条目中显示 Mounted on 挂载着 / 根目录 到这里可能还不怎么明白先继续向下看
做个小实验我们自己创建一个分区 1创建一个大空间文件
命令 dd if/dev/zero of./disk.iso bs1M count5
if/dev/zero指定输入文件为 /dev/zero这是一个特殊的文件可以无限提供零值的数据。of./disk.iso指定输出文件为当前目录下的 disk.iso 文件。bs1M设置每次读写操作的数据块大小为 1MB。count5指定要复制的数据块数量为 5 个。
整条命令的意思是从 /dev/zero 中读取数据每次读取 1MB总共读取 5 次然后将这些数据写入到名为 disk.iso 的文件中。因此最终会在当前目录下创建一个大小为 5MB 的全零文件 disk.iso。
这种命令常用于创建空的文件或测试文件 不用记住本命令如何写只要知道该命令最终为我们创建了一个 大小为 5MB 的全零文件
2写入文件系统
向上面的那个新建文件写入文件系统 命令 mkfs.ext 双击tab查询当前Linux系统中支持的文件系统类型 命令 mkfs.ext4 disk.iso 向文件写 disk.iso 入文件系统 ext4
到这一步相当于我们有了一个小的分区 disk.iso
但该分区现在还使用不了
还需将这个 “磁盘” 挂载到系统目录下 3创建目录
命令 sudo mkdir /mnt/myvda2 在该目录下创建目录文件 myvda2
意思是准备将我们前面创建的分区挂载到该目录下 4将“虚拟”磁盘分区挂载到目录下
命令 sudo mount -t ext4 ./disk.iso /mnt/myvda2
本条命令的意思是
mount 挂载 -t ext4 指明文件系统类型 -t 为 ext4 ./disk.iso /mnt/myvda2 将分区 ./disk.iso 挂载到指定路径 /mnt/myvda2 下 5实验一下
我们 cd 到该文件目录下即进入该分区内cd /mnt/myvda2
我们在该目录下创建一个文件就是在该虚拟磁盘分区中创建 实际上我们进入的并不是 /mnt/myvda2 而是该目录下挂载的虚拟磁盘分区disk.iso。 6卸载虚拟分区
命令 sudo umount /mnt/myvda2 解除挂载
它提示这个卸载目标是忙的因为当前用户处在这个目录下 因此需要先退出来再卸载就能发现消失了
那我们能不能通过这个方式卸载掉根目录挂载的磁盘分区呢
卸载一个路径挂载分区必须退出该分区所挂载的目录路径
逻辑上做不到卸载掉根目录挂载的磁盘分区因为我们无论如何都一定处在根目录下因此这个模块肯定不能通过这个方式卸载 7总结 每一个数据分区需要挂载到一个具体的目录下才能被访问和使用。当一个分区被挂载到某个目录后该目录就成为了该分区的挂载点。从这时起所有对该挂载点及其子目录的操作实际上都是对这个分区的操作。
具体来说如果你将一个数据分区挂载到了 /mnt/myvda2/ 这个目录下那么
你创建的所有文件和目录都将存储在这个分区上。访问这些文件和目录时必须通过挂载点 /mnt/myvda2/ 开始指定路径。
例如如果你在这个分区上创建了一个名为 test1 的目录然后再在这个目录下创建了一个名为 test2 的子目录那么这个子目录的完整路径将会是 /mnt/myvda2/test1/test2。
/mnt/myvda2/ 是挂载点提供的路径部分。test1/test2 是在分区内部创建的路径部分。
这样的设计使得多个不同的物理存储设备可以通过统一的文件系统层次结构文件系统层次结构是指整个系统的目录树结构来访问用户无需关心文件实际存储在哪个物理设备上只需要通过标准的路径来访问即可。 根目录/整个文件系统层次结构的起点。所有其他的目录和文件都是从根目录开始的。挂载点一个分区或外部存储设备被挂载到现有目录树中的某个特定目录上这个目录就称为挂载点。挂载点之后的所有文件和目录都属于这个分区。统一的命名空间无论文件实际存储在哪个物理设备上用户都可以通过一个统一的路径来访问它们。这意味着用户不需要知道文件的具体存储位置只需知道路径即可。 8回答最开始的问题
你怎么确认你在哪一个分区里面???
实际上你在某个挂载了数据分区的目录下这个目录就是挂载点
所有对该挂载点及其子目录的操作实际上都是对这个分区的操作
只要我们在这个目录下了其实就已经处于该分区中操作了
而访问操作一个文件必须通过唯一路径访问而路径的前缀不就是该数据分区挂载点的路径吗不就自动直接进入了该分区中进行操作吗 我们所有的文件操作都是在根目录的基础下操作的
表示我们就已经进入了挂载到根目录的 /dev/vda3 磁盘分区中进行操作了 9衍生问题
既然根目录挂载了 /dev/vda3 的磁盘分区
既然在根目录中做的所有操作实际上都是 /dev/vda3 的磁盘分区中进行的操作是不是说明我在基于根目录的目录 /mnt/myvda/ 下挂载的一个新数据分区实际上也存储在/dev/vda3 的磁盘分区中该数据分区也在 /dev/vda3 的磁盘分区中操作
并不是的挂载点具有独立性
当一个目录被挂载到另一个分区时所有对该目录及其子目录的操作都会在被挂载的分区上进行而不是在原本的分区上。而挂载点的上级路径仍然在原本的分区中进行操作
例如在/mnt/myvda/ 下挂载一个新数据分区则该目录及其子目录的操作都会在挂载的新数据分区中进行而挂载点的上级路径仍然在原本的分区中进行即 /mnt 下的操作还是在原本的分区中
总结无论你当前路径属于谁只要我另外挂载新的分区则我这个目录就指向新的分区了独立出去操作了 而我们将分区一挂载到根目录我们在根目录下又创建几个新目录用于挂载新分区
不妨碍我们从根目录下开始解析路径只是解析路径到一个挂载了新分区的目录则自动进入到这个新分区中继续进行操作这个解析路径换分区过程实际上是不同目录挂载不同分区只是跳转到不同的存储分区中继续进行操作罢了 解析路径的过程
从根目录开始解析 路径从根目录 / 开始。系统依次查找 /test1, /test2, 和 /test3 目录。 遇到挂载点 发现 /test3 是一个挂载点挂载了 /dev/vda2 分区。系统自动跳转到 /dev/vda2 分区中继续解析路径。 在新分区中继续解析 在 /dev/vda2 分区中查找 03.txt 文件。最终找到并操作 /test3/03.txt 文件。
理论总结
共用同一套文件层次路径虽然所有的目录和文件共享相同的路径层次结构但实际存储位置取决于它们所在的分区。不影响路径指向不同的分区即使路径看起来相同由于挂载点的存在某些路径可能指向不同的物理分区