linux查缺补漏之磁盘和文件系统
linux磁盘与文件系统
格式化
因为每一种文件系统设置所设定的文件属性/权限并不相同,为了存放这些数据,就需要将分隔槽格式化,比如在linux上面文件系统里面就有
inode
,block
,superBlock
,这些就是为文件系统而存在的,所以在格式化的时候,就需要在磁盘里面加上标签,标号神马的!
文件系统
在没有LVM和磁盘阵列技术之前,一个分隔槽就代表了一个文件系统,现在而是将可以被挂在的数据成为文件系统而不是一个分隔槽
三个文件系统里面的基本数据
- superBlock:记录一个fileSystem的inode/block总量,使用量,剩余量,一级文件系统格式和相关信息
- inode:用来存放文件的相关权限信息,同时记录真正数据所在的block号码
- block:实际记录文档内容的地方
因为在linux上面ext3/4这种特殊的存储形式,不容易产生碎片,所以linux上面一般不需要碎片整理
区块群组
block区块是记录档案的实际内容的,所以在规划好以后,就不能再改变了,如果一个block区块过于庞大的话,就会造成数据读取的不高效
所以linux文件系统就采用了区块群组的方式,每一个区块群组都有自己独立的inode,block,superBlock
data block
- 每一个区块群组的block大小和数量在第一次格式化时就已经确定了,除非重新格式化
- 每一个block只能放置一个档案!
inode table
inode如同data block一样,一旦格式化,就无法在改变数量了。
还有下面的几个特性:
- 每一个inode的大小固定为
128B
- 每一个档案都只占用
一个
inode而已- 因此每一个文件系统可以创建的
文件数量
与inode数量有关- 在读取一个文件的数据时,首先inode权限校验用户权限再决定读不读去block信息
有些时候因为文件的数据过多,需要记录多个多个block信息,inode却只有
128B
,那么inode里面就有12个直接,一个间接,一个双间接 , 一个三间接,这样就可以利用block数据来记录block号码了!
区块群组
每一个文件系统的block数目在格式化的时候就已经确定了,但是有些时候因为文件系统过于庞大,就将一个文件系统里面的block分为一个一个的组,就是区块群租,就比如Group1 , Group2
inode,superBlock, inode bitmap , block bitmap这些都是特殊的block,将block特殊化以后就用来存储一些特殊的数据,所以一般文件的数据内容都是放在block里面的!
用dumpe2fs可以看到:Group 0: (Blocks 0-32767) [ITABLE_ZEROED]
Checksum 0xec2c, unused inodes 0
主 superblock at 0, Group descriptors at 1-1
保留的GDT块位于 2-406
Block bitmap at 407 (+407), Inode bitmap at 423 (+423)
Inode表位于 439-948 (+439)
22643 free blocks, 0 free inodes, 1138 directories
可用块数: 9881, 10126-32767
可用inode数:这里面的inode , spuerBlock等等内容都是放于block块里面的
目录与inode, block之间的关系
一个目录与一个inode关联和至少一个block关联
- inode里面保存权限信息以及分配的block块号
- 分配的block里面则保存文件名字以及文件名字对应的inode(因为通过inode就可以找找文件了)
inode number filename 123 file1 456 file2 789 file3 block里面就是按照这样的形式保存目录下文件的信息
目录的大小为啥都是一个固定的倍数
因为目录下inode占用
128B
,而block占用4k
,所以基本都是4096的倍数!
挂载
挂载点一定是目录,该目录是进入文件系统地入口,因为并不是所有的文件系统都可以使用,必须要在挂在以后才可以使用!
/文件系统的inode标号
ls -i -d / /. /..
我们得到结果:
2 drwxr-xr-x 23 root root 4096 4月 12 21:43 //
2 drwxr-xr-x 23 root root 4096 4月 12 21:43 /./
2 drwxr-xr-x 23 root root 4096 4月 12 21:43 /../
linux VFS(linux virtual file system)
因为linux可以挂在多重类型的file system,各种文件系统之间有较大差别,我么通过virtual file system 来将底层的各种类型的文件系统抽象成无差别的,具体的识别区分工作就交给VFS来完成
df(列出磁盘整体使用量)
df -akmThHi
- -a列出所有的文件系统
- -k 以kb形式表现
- -m 以mb的形式表现
- -h human可读的形式展现出来
- -H human可读的形式展现出来,只是将1000作为之间的缩放比例
- -T 就着列出文件系统的了类型
- -i 列出inode的使用情况df 命令是通过读取一个文件系统的里面的superBlock来获取的,速度非常的快速,所以df命令后面接上的必须是一个文件系统,一个没有被文件系统挂在的目录是不可以的!
du评估文件系统的磁盘使用量
du -asShkm dirName
- -a 所有的文件条目
- -s 列出总和
- -S列出除了当前目录,不包括子目录
- -h human可以读的
- -k kb show
- -m -mb show注意:直接du的话是只列出当前目录下面的目录大小,该目录下的文件并不列出,所以列出的容量和当前./容量是不相同的,加上
-a
选项就可以啦
硬链接(实体连接)
硬链接可以说是只是在目录对应的block下面增加一个条目,里面保存了文件名字和文件对应的inode号码:
filename inodeNumber filename1 indoeNumberA filename2 inodeNumberA 其中filename1好filename2都是对应同一个inodeNumber,所以file1和file2都是只占用一个文件的空间大小的,实际上保存的东西只是文件名字和inode,所以在新建一个硬链接的时候一般不增加内存大小,除非对应的目录的block满了需要申请一块新的内存。
主要存在一个名字指向inode,那么这个inode指向的资源就不会被释放,意思就是只要存在一个硬链接,那么文件就是一直存在
硬链接的限制
- 不能跨越文件系统:因为硬链接的基础是inode,而每一个文件系统的inode都是彼此独立的,所以不能跨越文件系统
- 不能硬链接目录:因为硬链接的时候需要同时链接目录下面的所有文件,为了降低这个操作的复杂度,于是不允许目录的实体连接
符号链接(软链接)
软链接就好比是一个快捷方式。创建软链接就像是新建一个文件,将被链接的完全路径写入到文件里面,一旦对软链接操作的时候,那么就会读取对应的被链接文件的名字,再开始操作!一旦软链接链接的文件被删除,软链接虽然还存在,但是已经失效了
软链接是需要占用inode和block的,因为是一个新的文件,而不是简单的在目录里面添加条项
格式化
在我们用fdisk穿件一个新的分割槽以后,如果我们要使用这个分隔槽,那么就需要格式化这个分割槽
格式化命令:
- mkfs -t fileSystemType device
- mke2fs [-b size][-i size][-L ][-cj]
文件系统的检查与修复
在系统断电等等情况下,都有可能造成文件系统的损坏,那么我们就要对文件系统进行修复,现在的指令一般有
fsck
和badblocks
fsck注意事项
fsck只有在系统发生重大事故的时候才会使用,而且在文件系统挂载的时候切记不可进行fsck检查,否则将会损坏文件系统!!!!要检查的文件系统一定要在umount以后才可fsck
命令如:fsck -C -f -t ext4 /dev/sdb1
这里的-C选项就是用来显示当前检查的进度
lost+found文件夹
在一个文件系统里面一般会有一个叫做
lost+found
的文件夹,这个文件夹一般都是在fsck
以后存放有问题数据的地方的,当你fsck
以后,这个文件见就会自动消失
单人维护模式
一般在单人维护模式下面,根文件系统的权限为只读的,这个时候我们需要将根文件系统挂在为可读写的
mount -o remount,ew,auto /
mount命令
-a选项:将
/etc/fatab
全部没有挂在的东西挂在上来
-l选项:显现在已经挂在的文件系统有哪些,-l
会显式对的Label
-t选项:指定要挂载文件系统的类型
-n选项:在挂载时候不写入到文件/etc/mtab
里面去,比如在单人模式下面就特别有用
-o选项:这里选项是很强大的:
arg1 arg2 descibe ro rw 控制文件系统读写 async sync 采用同步写入还是异步写入的机制 auto noauto 允许这文件系统以 mount -a
的形式挂载dev nodev 是否允许在这个文件系统上建立装置档案 suid nosuid 是否允许在这个文件系统上面含有 suid/sgid
的文件exec noexe 是否允许在文件系统下面有可执行文件 default 默认标配 remount 重新挂载文件系统
mount –bind
将某个目录挂在到某个目录下面就可以使用
mkdir /tmp/tempHome
mount --bind /home /tmp/tempHome
这两个目录有相同的inode,有点类似于硬链接
文件系统还可以通过相应的label来挂载
我们在格式化文件系统的时候可以指定一个label,比如命令:mke2fs -b -i -j -L “qeesung_label”
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。