文件系统操作,分区、挂载等
磁盘容量 df
列出文件系统的整体磁盘的使用量,包括了使用情况等等。个人理解是目录树上已挂载的所有文件系统。当你动态再挂载一个window上的分区时候,就会多出一个新的文件系统挂载。
目录容量 du
列出的是目录文件的信息,-a 表示目录下的所有文件(包括普通文件和目录文件),-s 表示当前目录下所有的目录文件的大小之和大小, -S 表示当前目录的下所有目录各自的目录文件大小
连接文件 ln
说起这个概念,首先要区分硬连接和软连接。我们直到目录文件是如何管理它的下属文件的呢,首先目录文件本身就是一个文件,它是由inode和block构成,inode存储目录的权限等信息,block存储它的下属信息,包括了文件名和对应的文件indoe。明白了这个概念就很好理解硬连接了,对于一个文件创建一个新的硬连接就是在你指向的新的目录文件中的block添加了一条文件名和inode,所以理论上只要新的目录文件block大小足够,所有的磁盘容量都未发生变化,只是多写了一条指向信息。
看到这个例子,文件中只有target.txt,所以hardDir这个目录文件的block有指向target.txt的信息,这是一个硬连接,对于target.txt只有这个连接存在,所以看到权限信息后面的连接数为1。接下来做了一个操作,-i只是表示快速生成连接,我们新建了一个指向target.txt硬链接文件,这时候的变化就是在hardDir目录文件的block中又多了一条信息,文件名是hardToTarget但是inode索引值是和target.txt一样的。所以我们看到这个inode文件的连接数变成了2。看到这里我们体会到名字并不能代表一个文件,一个inode才能说是一个文件。
接下来我们来说下什么是软连接,软连接它创建了一种新的文件。我们知道文件有不同类型格式,连接文件link就是一个独立的文件。所以这个连接文件自身肯定被hardDir这个目录文件指引。它自身存储的是"target.txt"这十个字符,所以它的大小是10,它指向的是本目录文件,然后通过它记录的文件名去寻找文件。
我们做个实验改一下文件名,软连接没用了。硬连接还是正常的,因为里面没数据所以效果没看出来。
另一点比较重要,目录文件inode是无法支持硬链接的,因为如果使用hard link连接到目录,连接的数据需要连通被连接目录下所有数据建立连接。更新数据环境相当复杂。所以目录只支持软连接。
磁盘分区、格式化、检验与挂载
磁盘的分区概念应该来源于MBR以及分区表,我们说过分区表只有64B,只有至多四个主分区,至多一个扩展分区。扩展分区里面可以有多个逻辑分区。这是因为分区表只能有四个分区,所以存在着扩展分区,使得扩展分区可以包含多个逻辑分区扩大管理。
- fdisk -l 指令可以看到整个系统内能够找到的设备的所有分区,记得比如说是sda磁盘设备,那么分区名字会是sda1、sda2等等以此类推。如下图,我们可以看到整个系统只有一个硬盘Disk /dev/sda,然后是该硬盘下的所有分区,如果你插了u盘或者其他数据盘,那么会有其他Disk出现。列表包括了设备名,起始末的扇区编号,大小,类型等。
- 当我们找到对应的硬盘,使用fdisk /dev/sda 注意此时后面不能加数字。此时我们进入了fdisk这个程序的工作界面,指令我们可以不用记,因为按下m我们就可以获取相关管理的指令了。比如说删除就是d新建一个分区就是n等等,然后按照提示进行操作即可。值得注意的是按q表示不保存退出,当要保存的时候则按下w即可。
- mkfs进行格式化指令,fsck进行磁盘检测
- 挂载需要挂载到一个新的目录文件中去,拔掉对应的挂载设备最好先umount,因为目录树是整个文件系统的主干,为了避免发生错误。
- 开机挂载需要设置在/etc/fstabl中,如下图,我们可以看到大致由六个组成,包括了磁盘的名字,挂载点,文件系统类型,文件系统参数,能否被dump备份命令作用(0或者不存在表示不需要),是否以fsck检验扇区(1表示开机强制检查,2表示其他文件不定期检查,0表示不需要检查),这个文件如果写错了就开机不了了,必须到单用户模式下进行操作。实际上文件系统挂载记录到/etc/mtab和/proc/mounts中的。
- 特殊设备loop挂载,我们所说的loop设备文件可以说是文件系统上的文件系统,比如说一个镜像文件iso就是一个文件系统嘛,把它当成一个文件挂载在我们目录上,按照读文件系统的方式读取这个文件,这就是loop设备文件。下面我们演示下挂载一个loop文件
- 构建交换空间,并且进行挂载。由于可能磁盘没有空余空间分区,我们可以采用loop设备构建的方式。流程有构建一个文件然后格式化为swap文件格式,用swapon进行启动,swaponff关掉相应的swap file.