7.1 认识Linux文件系统
7.1.1 磁盘组成与分区的复习
1、磁盘的组成部分
1)圆形的碟片:记录数据
2)机械手臂
3)主轴马达
2、碟片的物理组成
1)扇区(Sector),最小的物理存储单位,512B/4KB
2)柱面(Cylinder),扇区组成的一个圆
3)磁盘分区表,分为MBR/GPT,GPT分区数量更多,容量可以超过2TB
3、物理磁盘和虚拟磁盘
物理磁盘的文件名:/dev/sd[a-p][1-128]
虚拟磁盘的文件名:/dev/vd[a-p][1-128]
7.1.2 文件系统特性
一个可被挂载的数据为一个文件系统,而不是一个分区
文件系统一开始就将inode和数据区块规划好了,除非重新格式化(或使用命令修改),否则inode与数据块固定后就不再变动
系统格式化后会分为多个区块群组(block group),文件系统最前面有一个启动扇区,可以安装启动引导程序,而每个区块群组包含6个内容,如下:
1)Superblock超级区块
记录此文件系统的整体信息,包括inode与数据区块的总量、使用量、剩余量,以及文件系统的格式与相关信息
一个文件系统只能有一个超级区块,除了第一个群组,后续群组不一定包括超级区块,就算有也只是备份
2)文件系统描述:每个区块群组的开始与结束的区块
3)区块对照表:管理区块状态,通过此表可快速找到空闲区块
4)inode对照表:管理inode状态,通过此表可快速找到空闲inode
5)inode Table(inode表):
记录每个文件的属性,一个文件占用一个inode,同时记录每个文件的数据所在的区块号码,inode固定128B,新的ext4和xfs可设置256B
系统读取文件都要先找到inode,判断权限和用户,确认是否可以读取内容
inode记录区域号码的区域有12个直接,1个间接,1个双间接,1个三间接,使得一个inode可以记录的文件达到16G以上,表映射如下:
inode记录的数据至少有
a. 该文件的读写属性
b. 该文件的拥有者与用户组
c. 该文件的大小
d. ctime/atime/mtime
6)数据区块
实际记录文件的内容,一个文件占据1-n个,区块大小有三种(1K, 2K, 4K)
注意,一个区块最多放一个文件的数据,若文件小于区块,剩余容量不能被使用
7.1.4 与目录树的关系
1)文件系统会分配一个inode与至少一块区域给该目录
2)1个100K的文件需要1个inode,26个区块,因为还要1个区块记录区块号码
3)inode不存文件名,文件名记录在目录的区块中,所以增删改文件名与目录的w有关
7.1.5 日志式文件系统(Journaling filesystem)
为了避免文件系统不一致所设计的文件系统,比如ext3和ext4,数据记录中发生问题,可以通过日志记录区块检测哪个文件发生问题,从而针对性修复
7.1.9 XFS文件系统简介
ext4文件系统支持度最广,但是格式化很慢,而XFS文件系统支持高容量磁盘与巨型文件,且恢复和创建速度也不错
7.2 文件系统的简单操作
df:列出文件系统的整体磁盘使用量
-a:列出所有文件系统
-h:以人们容易阅读的G,M,K格式显示
-i:不用磁盘容量,而以inode的数量来显示
du:查看文件系统的磁盘使用量
-a:列出所有文件与目录的容量
-h:容易阅读
-s:仅列出总量
ln:硬链接与符号链接
-s:如果不加参数就是硬链接,加s就是符号链接
lsblk:列出系统上的所有磁盘列表
-d:仅列出磁盘本身,不列出分区
-f:同时列出磁盘内的文件系统名称和UUID
-p:列出该设备的完整设备文件名
[tecs@host-69 ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 446.1G 0 disk
├─sdb1 8:17 0 10M 0 part
├─sdb2 8:18 0 1G 0 part /boot
├─sdb3 8:19 0 90G 0 part
│ ├─vg_sys-lv_root 253:0 0 20G 0 lvm /
│ ├─vg_sys-lv_home 253:4 0 20G 0 lvm /home
│ └─vg_sys-lv_var 253:5 0 50G 0 lvm /var
├─sdb4 8:20 0 24G 0 part
│ ├─vg_data-lv_swap 253:1 0 4G 0 lvm [SWAP]
│ └─vg_data-lv_nova 253:3 0 20G 0 lvm /var/lib/placements
└─sdb5 8:21 0 100G 0 part
└─vg_ceph-lv_ceph 253:2 0 99G 0 lvm
输出信息说明:
NAME :设备文件名,省略/dev
MAJ:MIN :内核识别时使用,分别是主要:次要设备代码
RM :是否为可卸设备
SIZE :容量
RO :是否为只读设备
TYPE :类型为磁盘(disk)、分区(part)、逻辑设备(lvm)、只读存储器(rom)
MOUNTPOINT :挂载点
blkid:列出设备的UUID等参数
parted:列出磁盘分区表类型与分区信息
parted device_name print
可以列出分区表的格式,更好的判断磁盘分区的命令
[root@host-70 tecs]# parted /dev/sdy print
Model: AVAGO MR9361-8i (scsi) # 磁盘的模块名称(厂商)
Disk /dev/sdy: 480GB # 磁盘总容量
Sector size (logical/physical): 512B/4096B # 磁盘每的每个逻辑/物理扇区容量
Partition Table: gpt # 分区表的格式(mgr或gpt)
Disk Flags:
Number Start End Size File system Name Flags # 下面是分区数据
1 1049kB 11.5MB 10.5MB bios_grub bios_grub
2 11.5MB 1085MB 1074MB ext4 primary
3 1085MB 97.7GB 96.7GB primary lvm
4 97.7GB 124GB 25.8GB primary lvm
5 124GB 231GB 107GB Linux filesystem
gdisk/fdisk:磁盘分区
MBR分区用fdisk,GPT分区用gdisk,可以通过parted查看
分区完毕后使用partprobe -s更新linux内核的分区表信息
[root@host-192-168-177-8 ~]# gdisk /dev/sdb(为GPT分区加磁盘分区) Command (? for help): p --输入p回车,打印分区表, 如果输入?可以查看命令 Command (? for help): n --输入n回车,增加一个分区 Partition number (5-128, default 5): --回车 First sector (34-1169919966, default = 252811264) or {+-}size{KMGTP}: --回车,起始扇区 Last sector (252811264-1169919966, default = 1169919966) or {+-}size{KMGTP}: +100G --设置分区 dev/sdb5 为100G,终止扇区,如果直接回车就是全部扇区 Command (? for help): w --输入w回车,w是保存,不保存按q Do you want to proceed? (Y/N): Y --输出Y回车 |
---|
mkfs.xfs:磁盘格式化,创建XFS文件系统
mkfs.xfs 设备名称(比如:/dev/sda5)
mkfs.ext4:磁盘格式化,创建ext4文件系统
mkfs.ext4 设备名称(比如:/dev/sda5)
xfs_repair:检查/修复XFS文件系统
只有xfs文件系统错乱才使用,修复时文件系统不能被挂载,后面接设备名称
-f:后面的设备是个文件
-n:单纯检查
-d:用在单人维护模式下面,针对根目录进行检查和修复,很危险,不要随便使用
fsck.ext4:检查/修复ext4文件系统
-f :强制检查
mount:挂载文件系统
1)单一文件系统不应该被重复挂载在不同的挂载点(目录)中
2)单一目录不应该重复挂载多个文件系统
3)作为挂载点的目录,理论上要是空目录
mount [-t 文件系统] LABEL='' 挂载点
mount [-t 文件系统] UUID='' 挂载点
mount [-t 文件系统] 设备文件名 挂载点
-a:依照配置文件/etc/fstab将所有未挂载的磁盘都挂载上来
-l:显示Label名称
-t:选中挂载的类型,xfs,ext3,ext4,一般系统会自动分析选中