Linux
获取磁盘和目录容量
主要用到了两个指令:
- df:列出文件系统的整体磁盘使用情况
- du:评估文件系统磁盘的使用量,常用在推估目录所占容量
df
df [-ahikHTm] filename
下表为参数和选项:
选项 | 作用 |
---|---|
-a | 列出所有文件系统,包括文件特有的/proc等文件系统 |
-k | 以Kbytes的容量显示各文件系统 |
-m | 以MBytes的容量显示各文件系统 |
-h | 以人们较容易阅读的Gbytes、Mbytes、Kbytes等进行阅读 |
-H | 以M=1000K取代1024K的进位方式 |
-i | 不用磁盘容量,而已inode的个数来显示 |
下面选择较易阅读的容量格式进行显示:
可以发现,会根据文件实际的大小进行合适的容量格式进行显示
du
du [-ahskm] filename
选项 | 作用 |
---|---|
-a | 列出所有的文件与目录容量(默认仅统计目录底下的文件量) |
-h | 以人们较容易阅读的容量格式进行显示(与df类似) |
-s | 列出总量,而不列出每个目录所占的容量 |
-S | 不包括子目录下的统计,与-s类似 |
-k | 以KBytes的容量格式进行显示 |
-m | 以MBytes的容量格式进行显示 |
实体链接和符号链接
先来讲一下连结档, linux的连结档有两种:
- 符号链接: 类似window的快捷方式功能的文件
- 硬链接: 透过文件系统的inode连接来产生新的档名
他们与原文件的关系如下图:
实体链接 Hard Link
简单来讲:实体链接就是在某个目录下新增一笔档名链接到inode号码的关连记录。因为文件的内容与inode有关,我们可以让多个档名对应相同的文件内容即可实现。
所以**Hard Link可以理解为在某个目录下的一个档名,用来链接到某个inode号码的关连记录。**换言之,硬链接就是同一个文件使用了多个别名。
创建方法为:
link oldfile newfile
ln oldfile newfile
但文件系统对hard link也有限制,例如:
- 不能跨文件系统:因为不同的文件系统的相同inode不一定有相同的意义。
- 不能连结目录:现 Linux 文件系统中的目录均隐藏了两个个特殊的目录:当前目录(.)与父目录(…)。查看这两个特殊目录的 inode 号可知其实这两目录就是两个硬链接(注意目录 /mnt/lost+found/ 的 inode 号)。若系统允许对目录创建硬链接,则会产生目录环。
symblic link 符号链接
文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。
创建方法如下:
ln -s oldfile newfile
只是比硬链接时多了个-s的参数。
磁盘的分区、格式化、检验、挂载
先来了解一下,在系统里添加一颗磁盘的过程:
- 对磁盘进行分区,用来建立可用的partition
- 对该partition进行格式化,用来建立系统可用的文件系统
- 可以选择对刚刚建立好的文件系统进行检验
- 需要建立挂载点(或者是目录),将他挂载在文件系统上
观察磁盘分区状态
lsblk
用于列出系统上所有磁盘列表,lsblk是 list block device 的缩写。
lsblk [-dfimpt] device
参数 | 作用 |
---|---|
-d | 仅仅列出磁盘本身,并不会列出该磁盘分区数据 |
-f | 同时列出该磁盘内的文件系统名称 |
-i | 使用ASCII的线段输出,不用复杂的编码 |
-m | 同时输出该装置在/dev底下的权限数据 |
-p | 列出该装置的完整文件名 |
-t | 列出磁盘装置内的详细数据,包括磁盘队列机制、预读写的数据量大小等 |
输出信息 | 含义 |
---|---|
NAME | 装置的文件名,会省略/dev等前导目录 |
MAJ:MIN | 主要:次要装置代码 |
RM | 是否为可卸除装置,例如光盘,USB磁盘等 |
SIZE | 容量 |
RO | 是否为只读装置,1为只读装置 |
TYPE | 磁盘disk, 分区槽partition, 只读存储器rom |
MOUTPOINT | 挂载点 |
blkid
先来了解一下UUID是什么,UUID:wuniversally unique identifier,Linux会将系统内所有的装置给予一个独立的标识符。
blkid可以用来找出装置的UUID。
这里的PARTUUID是是该特定分区唯一可访问的惟一标识符。
磁盘分区
鸟哥写的是GPT分区的,而我的服务器用的是msdos分区,用的是fdisk。下面以我的服务器为例:
添加新的分区槽
partprobe 更新Linux核心的分区表信息
配置结束,系统还不能识别分区,需要重新载入完整的磁盘,这时候可以用partprobe进行更新Linux核心信息。
磁盘格式化(建立文件系统)
格式化实际上就是建立文件系统的过程,指令是mkfs(make filesystem),指令后面跟的指令与想要建立的文件系统有关:
- XFS文件系统为mkfs.xfs
- EXT4文件系统为mkfs.ext4
当然mkfs也支持其他的文件系统,例如ext2, ext3, vfat等文件系统
文件系统检验
如果文件系统发生粗乱,那么可以用文件系统检验来拯救。
ext4文件系统的文件系统检验
这奴棣ext4可以用fsck.ext4指令来处理。
fsck.ext4 [-pf] [-b superblock] device
选项 | 作用 |
---|---|
-p | 当文件系统在修复时,若有需要回复y的动作,则自动回复y来继续动作。 |
-f | 强制检查,强制fsck进入细部检查 |
-b | 后面接的时superblock的位置(只有在superblock损毁是使用),可以利用文件系统内备份的superblock来进行救援。 |
xfs文件系统的文件系统检验
用xfs_repair来处理xfs文件系统
xfs_repair [-fnd] device
选项 | 作用 |
---|---|
-f | 后面的装置实际上是一个文件而不是实体装置 |
-n | 单纯检差并不修改文件系统的任何数据(只是检查) |
-d | 通常在单人维护模式底下,针对根目录斤西瓜检查和修复的动作(不推荐使用,很危险) |
不论哪个文件系统,通常只有文件系统存在问题的时候才使用这个指令,否则正常情况使用会对系统造成危害。
还有一点就是文件系统检验的时候,被检查的partition必须没有挂载到系统上(也就是在卸除的状态)。否则就会有以下的情况: