不同的操作系统对文件管理方式各不相同,因为他们对于文件的权限属性等信息都有不同的规定,只有被格式化为与操作系统相适合的文件系统,才能被操作系统识别并且使用,下面主要研究Linux文件系统。
在Linux文件系统中,主要有以下几个重要的概念
- superblock:记录此 filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;
- inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的 block 号码;
- block:实际记录文件的内容,若文件太大时,会占用多个 block 。这里要注意区分扇区和block,扇区是硬件一次能够读写的最小单位,而一个block通常会占用2^n个扇区,block是软件一次读写的最小单位,增大block会提高性能降低利用率,减小block会提高利用率降低性能。
- 实体链接:不能跨文件系统,不能链接目录,原理是在目录下新建一个文件名,链接到文件的inode。
- 符号链接:创建一个独立的文件,保存了被链接文件的完整路径,文件大小等于路径名的长度。
- 单一文件系统不应该被挂载在不同的挂载点中,同一个挂载点不应该挂载多个文件系统,作为挂载点的目录,理论上应该是空的。
- 不仅可以挂载ext,vfat等常见文件系统,还可以挂载光盘镜像。
- 挂载时可以指定文件系统的一些参数,比如读写权限等,可以使用mount命令进行重新挂载。
- 可以通过修改 /etc/fstab 来设置开机自动挂载文件系统,每次修改之后最好通过mount -a命令测试挂载是否成功,否则可能导致系统无法启动。
- 可以制作一个loop设备文件并且对其进行格式化,甚至将其挂载到指定目录。
下面列出与文件系统有关的命令
- dumpe2fs,可以查询指定分区的superblock信息以及block group信息。
- ls -i,显示指定文件或目录的inode编号。
- df,列出文件系统整体磁盘使用量。
- du,评估文件系统的磁盘使用量。
- ln,创建实体链接或者符号链接。
- lsblk,可以列出所有块设备的信息。
- blkid,可以列出块设备的属性,如UUID等。
- fdisk,用于对MBR分区进行操作。
- gdisk,用于对GPT分区进行操作。
- parted,用于对MBR及GPT分区进行操作。
- mkfs,可以用来对指定分区进行格式化。
- fsck,可以用来对文件系统进行检查。
- mount,可以用来挂载一个文件系统。
- umount,可以用来卸载一个文件系统。
- mknod, 用来指定设备文件的类型。
- tune2fs,用来调整ext文件系统的参数,如label name和UUID。
- partprobe,用来手动更新设备分区信息。
- dd,可以用来创建空文件。
- mkswap,可以用来将分区格式化为swap分区。
- swapon,启用交换分区或交换文件。
- swapoff,关闭交换分区或交换文件。
- free,显示系统内存的使用情况。