Linux系统中的磁盘与文件系统管理
1、文件系统的类别
通过mk [tab][tab]查看当前系统支持的文件系统类型也差不多是常用的文件系统类型,当前cenos7系列以xfs为默认文件系统主要介绍此为主但ext系列的文件系统作为早期的系统支持度最完整而且一个磁盘的不同分区也可以有不同的文件系统所以一同介绍
[root@node0 ~]# mk
mkdict mkfs.ext2 mkinitrd
mkdir mkfs.ext3 mkisofs
mkdosfs mkfs.ext4 mklost+found
mkdumprd mkfs.fat mkmanifest
mke2fs mkfs.gfs2 mknod
mkfifo mkfs.minix mksquashfs
mkfontdir mkfs.msdos mkswap
mkfontscale mkfs.vfat mktemp
mkfs mkfs.xfs mkwinpeimg
mkfs.btrfs mkhomedir_helper
mkfs.cramfs mkhybrid
2、文件系统组成
超级区块:记录文件系统的整体信息,包括inode与数据区块的总量、使用量、剩余量,以及文件系统的格式与相关信息等
inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的区块号码
数据区块:实际记录文件的内容,若文件太大时,会占用多个区块。要注意的一点是一个区块仅能被一个文件占用所以要合理规划数据区块的大小否则会产生很多磁盘碎片
inode的内容:
文件的读写属性rxz
文件的拥有者与用户组
文件的大小
文件的简历或状态改变时间(ctime)、最近一次读取时间(atime)、最近修改时间(mtime)
定义文件特性的表示,如SetUID
文件真正内容的指向
除此之外的特色内容:
每个inode大小均是固定的128B(ext),新的ext4和xfs可设置到256B
每个文件都仅会占用一个inode而已,文件系统能建立的文件数量和inode数量有关
superblock主要内容;
记录数据区块与inode的总量
未使用与已使用的inode与数据区块数量
数据区块与inode的大小
文件系统的挂载时间、mtime、最近一次检验磁盘的时间等文件系统相关信息等
3、文件系统的操作
磁盘信息显示:
df:列出文件系统的整体磁盘用量
du:查案文件系统的磁盘使用量(常用在查看目录所占磁盘空间)
[root@localhost ~]# df -lh
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 17G 1008M 17G 6% /
devtmpfs 480M 0 480M 0% /dev
tmpfs 492M 0 492M 0% /dev/shm
tmpfs 492M 6.7M 485M 2% /run
tmpfs 492M 0 492M 0% /sys/fs/cgroup
/dev/vda1 1014M 133M 882M 14% /boot
tmpfs 99M 0 99M 0% /run/user/0
[root@localhost ~]# du -h /home
12K /home/yucheng
12K /home
磁盘的分区、格式化、检验与挂载:
总体规划:在系统需要新增一块磁盘的时候需要做的操作为1、对磁盘进行划分,以建立可用的硬盘分区
2、对硬盘分区进行格式化,以建立系统可用的文件系统,并且可以进行检验
3、建立挂载点并将分区挂载到挂载点
步骤详解:
1、观察磁盘的分区状态:
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 20G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 19G 0 part
├─centos-root 253:0 0 17G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
RO:是否为只读设备
RM:是否为可卸载设备
一些选项介绍
[root@localhost ~]# lsblk --help
用法:
lsblk [选项] [<设备> ...]
选项:
-a, --all 打印所有设备
-b, --bytes 以字节为单位而非易读的格式来打印 SIZE
-d, --nodeps 不打印从属设备(slave)或占位设备(holder)
-D, --discard 打印时丢弃能力
-e, --exclude <列表> 根据主设备号排除设备(默认:内存盘)
-I, --include <列表> 只显示有指定主设备号的设备
-f, --fs 输出文件系统信息
-h, --help 使用信息(此信息)
-i, --ascii 只使用 ascii 字符
-m, --perms 输出权限信息
-l, --list 使用列表格式的输出
-n, --noheadings 不打印标题
-o, --output <列表> 输出列
-p, --paths 打印完整设备路径
-P, --pairs 使用 key=“value” 输出格式
blkid列出设备的UUID(全局唯一标识符)、文件系统类型等参数
[root@localhost ~]# blkid
/dev/vda1: UUID="3411d6d7-c7d4-4da7-bd67-2a2461c7253d" TYPE="xfs"
/dev/vda2: UUID="zoM6YG-EiqC-DaBC-U3CC-M5I4-uGPF-HzRKqs" TYPE="LVM2_member"
/dev/mapper/centos-root: UUID="0523ecd4-dad9-4663-9aa7-3dc144ef0a06" TYPE="xfs"
/dev/mapper/centos-swap: UUID="0f2f4431-2453-4cc5-bac9-65813df253c8" TYPE="swap"
parted列出磁盘的分区表类型与分区信息:
[root@localhost ~]# parted /dev/vda print
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system 标志
1 1049kB 1075MB 1074MB primary xfs 启动
2 1075MB 21.5GB 20.4GB primary lvm
2、磁盘分区
目前磁盘分区方式分为三种分别是gdisk、fdisk、parted其中gdisk是GPT分区表分区命令fdisk是MBR分区表分区命令而parted则是两中分区表都支持,由于现在的硬盘容量到了比较大用MBR分区表有些不合时宜而且fdisk和gdisk操作差异也不大所以主要以学习gdisk分区方式为主。
gdisk:在分区前要通过lsblk或者blkid先找到磁盘,再用parted /dev/×× print来找出内部的分区表类型,之后再用gdisk来操作系统进行分区。
如图给磁盘sda新加一个分区5操作如下
[root@node0 ~]# gdisk /dev/sda
GPT fdisk (gdisk) version 0.8.6
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): p
Disk /dev/sda: 2344225968 sectors, 1.1 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 0633BE3F-E41B-48D3-BE73-DE1DE059F685
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 2344225934
Partitions will be aligned on 2048-sector boundaries
Total free space is 5229 sectors (2.6 MiB)
Number Start (sector) End (sector) Size Code Name
1 2048 411647 200.0 MiB EF02 sdb1_1617782210
2 411648 2461695 1001.0 MiB FD00 primary
4 2461696 2344222719 1.1 TiB 8E00 sdb4_1617782215
Command (? for help): n
Partition number (3-128, default 3): 5
First sector (34-2344225934, default = 2344222720) or {+-}size{KMGTP}: 2344222719
First sector (34-2344225934, default = 2344222720) or {+-}size{KMGTP}:
Last sector (2344222720-2344225934, default = 2344225934) or {+-}size{KMGTP}: +10M
Last sector (2344222720-2344225934, default = 2344225934) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
Command (? for help): p
Disk /dev/sda: 2344225968 sectors, 1.1 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 0633BE3F-E41B-48D3-BE73-DE1DE059F685
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 2344225934
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
Number Start (sector) End (sector) Size Code Name
1 2048 411647 200.0 MiB EF02 sdb1_1617782210
2 411648 2461695 1001.0 MiB FD00 primary
4 2461696 2344222719 1.1 TiB 8E00 sdb4_1617782215
5 2344222720 2344225934 1.6 MiB 8300 Linux filesystem
Command (? for help): w #要将磁盘分区信息写入磁盘分区表
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sda.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.
如图所示现在还是没有分区信息这是因为没有更新内核
[root@node0 ~]# cat /proc/partitions
major minor #blocks name
8 0 1172112984 sda
8 1 204800 sda1
8 2 1025024 sda2
8 4 1170880512 sda4
8 16 234431064 sdb
8 17 204800 sdb1
8 18 1025024 sdb2
8 20 233199616 sdb4
253 0 8388608 dm-0
253 1 20971520 dm-1
253 2 2097152 dm-2
9 127 1024960 md127
9 0 1024960 md0
253 3 1048576 dm-3
253 4 31457280 dm-4
253 5 9048064 dm-5
253 6 4481024 dm-6
253 7 53780480 dm-7
253 8 22323200 dm-8
147 5 1048508 drbd5
253 9 22323200 dm-9
进行partprobe更新Linux内核的分区表信息
[root@node0 ~]# partprobe -s
/dev/sda: gpt partitions 1 2 4 5
/dev/sdb: gpt partitions 1 2 4
/dev/mapper/everrunhwOXPo.91QE-centos7_a188eafe--ec62--4538--9628--7a7780f52758_node0: msdos partitions 2
/dev/mapper/everrunhwOXPo.91QE-cent0s8_7ae5eff6--20fe--4c34--852f--c512ddcab80f_node0: msdos partitions 2
删除分区的信息直接相同操作把新增的n参数改选为d其他操作一样
3、磁盘格式化
通过命令:mkfs.xfs(xfs文件系统)相当于mkfs -t xfs、mkfs.ext4(ext4文件系统)等
mkfs.xfs /dev/sda5
4、文件系统挂载与卸载
挂载前要注意的事项:
单一文件不应该被重复挂载在不同的挂载点里
单一目录不应该重复挂载多个文件
要作为挂载点的目录,理论上应该都是空白目录才行否则原来目录下的文件会隐藏
# mount /dev/sda5 /test #将分区sda5挂载到刚建立的目录test上,一定要先格式化文件系统才能挂载
# mount UUID='' /test #也可以用UUID来进行挂载
文件系统卸载
#unmount 设备文件名或挂载点均可
5、设置启动自动挂载
设置启动自动挂载进入到/etc/fstab这个文件修改文件内容具体如下
文件字段
#Dvice Mount point filesystem parameters dump fsck
[设备名/UUID/lable名] [挂载点] [文件系统类型] [文件系统参数默认default][备份命令默认0][0]
6、parted分区操作
[root@node0~]#parted [设备] [命令][参数]
parted /dev/vda print #列出目前本机的分区表信息
命令功能:
新增分区:mkpart [primary|logical|Extended] [ext4|vfat|xfs] 开始 结束
显示分区:print
删除分区:rm [partition]
parted分区操作因为不需要人机交互所以在写脚本的时候非常适用