初始化服务器:先备份centos8系统(192.168.209.110)上的/dev/sda的MBR分区表,破坏后,通过备份文件恢复。
1)查看110主机的/dev/sda分区表前512字节;
2)备份110主机的/dev/sda分区表的64个字节,并备份到111主机上的/data目录中;
3)破坏掉110主机上的/dev/sda分区表,并重启系统;
4)重启后不能正常进入系统;
5)虚拟机里设置centos8光盘镜像;
6)设置光盘启动;
7)选择Troubleshooting模式;
8)选择Rescue a CentOS Linux system;
9)选择3 Skip to shell;
10)进入系统后,查看没有ip地址
11)配置IP地址,使用ip a 或ifconfig命令
12)将209.111备份的sda.img文件复制过来
13)导入sda.img到/dev/sda分区的64字节
4)重启后正常
1.2 恢复无备份的分区表初始化服务器:未备份centos8系统(192.168.209.110)上的/dev/sda的MBR分区表,被破坏后,通过其他相同配置的服务器(209.111)分区表来恢复。
1)跳过/dev/sda分区表的446字节,查看后面的66字节
2)跳过/dev/sda分区表的446字节,破坏后面的64字节
3)启动后无法进入系统
4)开机按ESC键,选择光盘启动
5)选择Troubleshooting模式
6)选择Rescue a CentOS Linux system
7)选择3 Skip to shell
8)配置IP地址,使用ip a 或ifconfig命令
9)在209.111服务器上备份其分区表的后64字节
10)复制209.111服务器上的分区表备份sda111.img到本地服务器(209.110)
11)写入到209.110服务器的分区表中,重启后正常
2、创建文件系统2.1 文件系统概念文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等。
支持的文件系统:
各种文件系统:https://en.wikipedia.org/wiki/Comparison_of_file_systems
2.2 文件系统类型Linux 常用文件系统:
- ext2:Extended file system 适用于那些分区容量不是太大,更新也不频繁的情况,例如 /boot 分区
- ext3:是 ext2 的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中恢复
- ext4:是 ext 文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件(16TB)、最大1EB的文件系统,以及速度的提升。
- xfs:SGI,支持最大8EB的文件系统
- swap
- iso9660 光盘
- btrfs(Oracle)
- reiserfs
Windows 常用文件系统:
- FAT32
- NTFS
- exFAT
Unix:
- FFS(fast)
- UFS(unix)
- JFS2
网络文件系统:
- NFS
- CIFS
集群文件系统:
- GFS2
- OCFS2(oracle)
分布式文件系统:
- fastdfs
- ceph
- moosefs
- mogilefs
- glusterfs
- Lustre
RAW:
- 未经处理或者未经格式化产生的文件系统
常用的文件系统特性:
FAT32:
- ==最多只能支持16TB的文件系统和4GB的文件==
NTFS:
- ==最多只能支持16EB的文件系统和16EB的文件==
EXT3:
- 最多只能支持==32TB的文件系统和2TB的文件==,实际只能容纳2TB的文件系统和16GB的文件
- Ext3目前只支持32000个子目录
- Ext3文件系统使用32位空间记录块数量和 inode数量
- 当数据写入到Ext3文件系统中时,Ext3的数据块分配器每次只能分配一个4KB的块
EXT4:
- EXT4是Linux系统下的日志文件系统,是EXT3文件系统的后继版本
- ==Ext4的文件系统容量达到1EB,而支持单个文件则达到16TB==
- 理论上支持无限数量的子目录
- Ext4文件系统使用64位空间记录块数量和 inode数量
- Ext4的多块分配器支持一次调用分配多个数据块
- 修复速度更快
XFS
- 根据所记录的日志在很短的时间内迅速恢复磁盘文件内容
- 用优化算法,日志记录对整体文件操作影响非常小
- ==是一个全64-bit的文件系统,最大可以支持8EB的文件系统,而支持单个文件则达到8EB==
- 能以接近裸设备I/O的性能存储数据
查前支持的文件系统:
[root@centos8 ~]# cat /proc/filesystemsnodev sysfsnodev rootfsnodev ramfsnodev bdevnodev procnodev cpusetnodev cgroupnodev cgroup2nodev tmpfsnodev devtmpfsnodev configfsnodev debugfsnodev tracefsnodev securityfsnodev sockfsnodev daxnodev bpfnodev pipefsnodev hugetlbfsnodev devptsnodev autofsnodev pstorenodev mqueue xfs ext3 ext2 ext4[root@centos7 ~]# ls /lib/modules/`uname -r`/kernel/fsbinfmt_misc.ko.xz cachefiles cifs dlm ext4 fscache gfs2 jbd2 mbcache.ko.xz nfs_common nls pstore udf btrfs ceph cramfs exofs fat fuse isofs lockd nfs nfsd overlayfs squashfs xfs
2.3 文件系统选择管理2.3.1 创建文件系统mkfs创建文件管理工具
- mkfs命令:
mkfs.FS_TYPE /dev/DEVICE ext4 xfs btrfs vfatmkfs -t FS_TYPE /dev/DEVICE -L 'LABEL' #设定卷标,分区的描述信息,一般用挂载点命名,一目了然#示例:mkfs.xfs /dev/sdb1 #创建/dev/sdb1分区的文件系统为xfs,若提示已有其他文件系统,加-f选项mkfs.xfs /dev/sdb1 -f #创建后,自动分配一个UUID,32个(16进制)*4=128位(二进制),唯一性lsblk -f #查看文件系统mkfs.ext4 /dev/sdb === mkfs -t ext4 /dev/sdb #两个命令等价
- mke2fs:ext系列文件系统专用管理工具(逐渐淘汰)
常用选项:
-t {ext2|ext3|ext4|xfs} #指定文件系统类型-b {1024|2048|4096} #指定块 block 大小,文件占用的最小单位-L 'LABEL' #设置卷标-j #相当于 -t ext3, mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3-i #为数据空间中每多少个字节创建一个inode;不应该小于block大小-N #指定分区中创建多少个inode-I #一个inode记录占用的磁盘空间大小,128---4096-m #默认5%,为管理人员预留空间占总空间的百分比-O FEATURE[,...] #启用指定特性-O ^FEATURE #关闭指定特性
范例:查看文件块大小
1)ext4文件系统tune2fs -l /dev/sda1block size: 4096(4K) #文件占用的最小单位是4K,即使1个字节的文件也要占用4K2)xfs文件系统xfs_info /data(挂载点)或xfs_info /dev/sda2bsize=40963)指定block大小mkfs.ext4 -b 1024 #如果该分区中,都是1k左右的小文件,则设置块大小为1k,节省空间
范例:创建文件系统并修改文件系统
1)初始化硬盘/dev/sdb的分区[root@centos7 ~]# echo -e 'n\np\n1\n\n+500M\nw\n' |fdisk /dev/sdb[root@centos7 ~]# echo -e 'n\np\n2\n\n+400M\nw\n' |fdisk /dev/sdb[root@centos7 ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsdb 8:16 0 2G 0 disk├─sdb1 8:17 0 500M 0 part└─sdb2 8:18 0 400M 0 part2)查看sdb的分区文件系统类别[root@centos7 ~]# lsblk -fNAME FSTYPE LABEL UUID MOUNTPOINTsdb├─sdb1 #sdb1和sdb2均无文件系统└─sdb23)创建文件系统[root@centos7 ~]# mkfs.xfs /dev/sdb1[root@centos7 ~]# mkfs.ext4 /dev/sdb2[root@centos7 ~]# lsblk -fNAME FSTYPE LABEL UUID MOUNTPOINTsdb├─sdb1 xfs f2964200-c6b8-49af-a507-7be6a1da8db9└─sdb2 ext4 39b10cb6-ff63-46b2-a037-b952ad8d38ab
2.3.2 查看和管理分区信息1、ext系列文件系统工具1)tune2fstune2fs:重新设定ext系列文件系统可调整参数的值
常用选项:
备注:主要使用-l查看ext系列文件系统的元数据-l #查看指定文件系统超级块信息;super block-L 'LABEL' #修改卷标-m #修预留给管理员的空间百分比-j #将ext2升级为ext3-O #文件系统属性启用或禁用, –O ^has_journal-o #调整文件系统的默认挂载选项,–o ^acl-U UUID #修改UUID号
范例:
tune2fs -l /dev/sda1 #查看ext系列分区的文件系统元数据tune2fs -m number /dev/sda1 #修改预留空间百分比,如1代表1%tune2fs -o acl /dev/sda1 #添加acl权限tune2fs -o ^acl /dev/sda1 #禁用acl权限tune2fs -O ^has_journal /dev/sda1 #禁用has_journal,但不能在挂载的分区上禁用,提示错误tune2fs -O has_journal /dev/sdb2 #启用has_journaltune2fs -U
范例:
1) -l[root@centos7 ~]# lsblk -fNAME FSTYPE LABEL UUID MOUNTPOINTsdb├─sdb1 xfs f2964200-c6b8-49af-a507-7be6a1da8db9└─sdb2 ext4 39b10cb6-ff63-46b2-a037-b952ad8d38ab[root@centos7 ~]# tune2fs -l /dev/sdb1 #sdb1分区类型是xfs的,不能查看tune2fs 1.42.9 (28-Dec-2013)tune2fs: Bad magic number in super-block while trying to open /dev/sdb1Couldn't find valid filesystem superblock.[root@centos7 ~]# tune2fs -l /dev/sdb2 #查看sdb2分区的元数据2) -L[root@centos7 ~]# tune2fs -L test /dev/sdb2tune2fs 1.42.9 (28-Dec-2013)[root@centos7 ~]# lsblk -fNAME FSTYPE LABEL UUID MOUNTPOINTsdb├─sdb1 xfs f2964200-c6b8-49af-a507-7be6a1da8db9└─sdb2 ext4 test 39b10cb6-ff63-46b2-a037-b952ad8d38ab3) -m[root@centos7 ~]# tune2fs -l /dev/sdb2Filesystem OS type: LinuxInode count: 102400Block count: 409600Reserved block count: 20480 #默认保留空间为5%[root@centos7 ~]# tune2fs -m 1 /dev/sdb2tune2fs 1.42.9 (28-Dec-2013)Setting reserved blocks percentage to 1% (4096 blocks)[root@centos7 ~]# tune2fs -l /dev/sdb2Filesystem OS type: LinuxInode count: 102400Block count: 409600Reserved block count: 4096 #修改保留空间为1%4) -O[root@centos7 ~]# tune2fs -O ^has_journal /dev/sdb2tune2fs 1.42.9 (28-Dec-2013)[root@centos7 ~]# tune2fs -l /dev/sdb2tune2fs 1.42.9 (28-Dec-2013)
2)dumpe2fsdumpe2fs:显示ext文件系统信息,将磁盘块分组管理
常用选项:
-h #查看超级块元数据信息,不显示分组信息,同tune2fs -l
范例:查看ext文件系统的元数据和分组信息
[root@centos7 ~]# dumpe2fs /dev/sdb1dumpe2fs 1.42.9 (28-Dec-2013)dumpe2fs: Bad magic number in super-block while trying to open /dev/sdb1Couldn't find valid filesystem superblock.[root@centos7 ~]# dumpe2fs /dev/sdb2dumpe2fs 1.42.9 (28-Dec-2013)Filesystem volume name: <none>Last mounted on: <not available>Filesystem UUID: 39b10cb6-ff63-46b2-a037-b952ad8d38abFilesystem magic number: 0xEF53Filesystem revision #: 1 (dynamic)Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isizeFilesystem flags: signed_directory_hashDefault mount options: user_xattr acl #有acl功能权限Filesystem state: cleanErrors behavior: ContinueFilesystem OS type: LinuxInode count: 102400 #节点数量Block count: 409600 #块数量,总的空间Reserved block count: 20480 #被保留的空间,为root保留,默认5%的空间Free blocks: 386144Free inodes: 102389First block: 1Block size: 1024 #块大小,centos8上是4096Fragment size: 1024Group descriptor size: 64Reserved GDT blocks: 256Blocks per group: 8192Fragments per group: 8192Inodes per group: 2048Inode blocks per group: 256Flex block group size: 16Filesystem created: Mon Feb 22 14:24:22 2021Last mount time: n/aLast write time: Mon Feb 22 14:24:22 2021Mount count: 0Maximum mount count: -1Last checked: Mon Feb 22 14:24:22 2021Check interval: 0 (<none>)Lifetime writes: 8 MBReserved blocks uid: 0 (user root)Reserved blocks gid: 0 (group root)First inode: 11Inode size: 128 #文件的描述信息占用128字节,centos8里是256字节Journal inode: 8Default directory hash: half_md4Directory Hash Seed: b7c3b5e3-dd55-4fe3-86c5-ef6bf6a2a312Journal backup: inode blocksJournal features: (none)Journal size: 8MJournal length: 8192Journal sequence: 0x00000001Journal start: 0以上和tune2fs -l /dev/sda1查询的元数据相同下面是分组数据,包括超级块(Primary superblock)和多个备份超级块(Backup superblock)Group 0: (Blocks 1-8192) Checksum 0x68b6, unused inodes 2037 Primary superblock at 1, Group descriptors at 2-5 Reserved GDT blocks at 6-261 Block bitmap at 262 (+261), Inode bitmap at 278 (+277) Inode table at 294-549 (+293) 3789 free blocks, 2037 free inodes, 2 directories, 2037 unused inodes Free blocks: 4404-8192 Free inodes: 12-2048Group 1: (Blocks 8193-16384) [INODE_UNINIT] Checksum 0xf5fa, unused inodes 2048 Backup superblock at 8193, Group descriptors at 8194-8197 Reserved GDT blocks at 8198-8453 Block bitmap at 263 (bg #0 + 262), Inode bitmap at 279 (bg #0 + 278) Inode table at 550-805 (bg #0 + 549) 7931 free blocks, 2048 free inodes, 0 directories, 2048 unused inodes Free blocks: 8454-16384 Free inodes: 2049-4096...省略...
centos6上,手动分区后默认没有acl权限(安装OS时的分区有acl权限),需要手动添加。centos7、8后,会自动包含acl权限。
3)blkidblkid 可以查看块设备属性信息
格式:
blkid [OPTION]... [DEVICE]blkid #显示有文件系统的分区,会显示TYPE文件类型lsblk -f #也可以显示分区的文件系统
范例:
[root@centos7 ~]# blkid/dev/sda1: UUID="4d6ce1ba-16ec-4d37-951c-afd012231267" TYPE="xfs"/dev/sda2: UUID="H4mKHO-71FU-bAUR-InNX-ji0g-nuN3-BjOQLe" TYPE="LVM2_member"/dev/sdb1: UUID="f2964200-c6b8-49af-a507-7be6a1da8db9" TYPE="xfs"/dev/sdb2: LABEL="test" UUID="39b10cb6-ff63-46b2-a037-b952ad8d38ab" TYPE="ext4"/dev/mapper/centos-root: UUID="5753dc79-bc4e-4514-9eb7-56e5bbaa5dff" TYPE="xfs"/dev/mapper/centos-swap: UUID="da97a9bd-58d9-4770-92d8-07b6bd64ac1c" TYPE="swap"[root@centos7 ~]# lsblk -fNAME FSTYPE LABEL UUID MOUNTPOINTsda├─sda1 xfs 4d6ce1ba-16ec-4d37-951c-afd012231267 /boot└─sda2 LVM2_member H4mKHO-71FU-bAUR-InNX-ji0g-nuN3-BjOQLe ├─centos-root xfs 5753dc79-bc4e-4514-9eb7-56e5bbaa5dff / └─centos-swap swap da97a9bd-58d9-4770-92d8-07b6bd64ac1c [SWAP]sdb├─sdb1 xfs f2964200-c6b8-49af-a507-7be6a1da8db9└─sdb2 ext4 test 39b10cb6-ff63-46b2-a037-b952ad8d38ab
常用选项:
- -U UUID 根据指定的UUID来查找对应的设备
- -L LABEL 根据指定的LABEL来查找对应的设备
范例:
[root@centos7 ~]# blkid -L test/dev/sdb2[root@centos7 ~]# blkid -U f2964200-c6b8-49af-a507-7be6a1da8db9/dev/sdb1[root@centos7 ~]# blkid -U "39b10cb6-ff63-46b2-a037-b952ad8d38ab"/dev/sdb2
4)e2labele2label:只管理ext系列文件系统的LABEL
e2label DEVICE [LABEL]e2label /dev/sdb2 test #修改sdb2的卷标为test
范例:
[root@centos7 ~]# e2label /dev/sdb1 TESTe2label: Bad magic number in super-block while trying to open /dev/sdb1Couldn't find valid filesystem superblock.[root@centos7 ~]# e2label /dev/sdb2 TEST
5)findfsfindfs :查找分区
findfs [options] LABEL=<label>findfs [options] UUID=<uuid>
范例:
[root@centos7 modules]# findfs LABEL=test/dev/sdb2[root@centos7 modules]# findfs UUID=39b10cb6-ff63-46b2-a037-b952ad8d38ab/dev/sdb2
2、xfs文件系统工具[root@centos7 modules]# xfs_xfs_admin xfs_copy xfs_estimate xfs_fsr xfs_info xfs_logprint xfs_metadump xfs_ncheck xfs_repair xfs_bmap xfs_db xfs_freeze xfs_growfs xfs_io xfs_mdrestore xfs_mkfile xfs_quota xfs_rtcp
1)xfs_infoxfs_info:显示示挂载或已挂载的 xfs 文件系统信息
xfs_info mountpoint|devname
范例:
[root@centos7 ~]# lsblk -fNAME FSTYPE LABEL UUID MOUNTPOINTsda├─sda1 xfs 4d6ce1ba-16ec-4d37-951c-afd012231267 /boot└─sda2 LVM2_member H4mKHO-71FU-bAUR-InNX-ji0g-nuN3-BjOQLe ├─centos-root xfs 5753dc79-bc4e-4514-9eb7-56e5bbaa5dff / └─centos-swap swap da97a9bd-58d9-4770-92d8-07b6bd64ac1c [SWAP]sdb├─sdb1 xfs f2964200-c6b8-49af-a507-7be6a1da8db9└─sdb2 ext4 39b10cb6-ff63-46b2-a037-b952ad8d38ab[root@centos7 ~]# xfs_info /dev/sdb1 #未挂载,无法查询xfs_info: /dev/sdb1 is not a mounted XFS filesystem[root@centos7 ~]# xfs_info /dev/sda1 #sda1的xfs文件系统信息meta-data=/dev/sda1 isize=512 agcount=4, agsize=65536 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0data = bsize=4096 blocks=262144, imaxpct=25 = sunit=0 swidth=0 blksnaming =version 2 bsize=4096 ascii-ci=0 ftype=1log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1realtime =none extsz=4096 blocks=0, rtextents=0
2.3.3 文件系统检测和修复文件系统夹故障常发生于死机或者非正常关机之后,挂载为文件系统标记为“no clean”
==注意:一定不要在挂载状态下执行下面命令修复==
fsck: File System Checkfsck.FS_TYPEfsck -t FS_TYPE
注意:FS_TYPE 一定要与分区上的文件类型相同
常用选项:
-a #自动修复-r #交互式修复错误
1、e2fsck:ext系列文件专用的检测修复工具-y #自动回答为yes-f #强制修复-p #自动进行安全的修复文件系统问题
2、实例:修改破坏的ext文件系统1)centos7系统
[root@centos7 ~]# mkdir /data/sdb2;mount /dev/sdb2 /data/sdb2[root@centos7 ~]# lsblk -fNAME FSTYPE LABEL UUID MOUNTPOINTsda├─sda1 xfs 4d6ce1ba-16ec-4d37-951c-afd012231267 /boot└─sda2 LVM2_member H4mKHO-71FU-bAUR-InNX-ji0g-nuN3-BjOQLe ├─centos-root xfs 5753dc79-bc4e-4514-9eb7-56e5bbaa5dff / └─centos-swap swap da97a9bd-58d9-4770-92d8-07b6bd64ac1c [SWAP]sdb├─sdb1 xfs f2964200-c6b8-49af-a507-7be6a1da8db9└─sdb2 ext4 test 39b10cb6-ff63-46b2-a037-b952ad8d38ab /data/sdb2sr0 iso9660 CentOS 7 x86_64 2018-11-26-14-22-58-00[root@centos7 ~]# cp /etc/fstab /data/sdb2[root@centos7 ~]# cp /etc/fstab /data/sdb2/f1[root@centos7 ~]# ls /data/sdb2/f1 fstab lost+found[root@centos7 ~]# dd if=/dev/zero of=/dev/sdb2 bs=1M count=11+0 records in1+0 records out1048576 bytes (1.0 MB) copied, 0.00267759 s, 392 MB/s[root@centos7 ~]# ls /data/sdb2[root@centos7 ~]# tune2fs -l /dev/sdb2tune2fs 1.42.9 (28-Dec-2013)tune2fs: Bad magic number in super-block while trying to open /dev/sdb2Couldn't find valid filesystem superblock.[root@centos7 ~]# dfFilesystem 1K-blocks Used Available Use% Mounted on/dev/sdb2 18446744073709530478 18446744073709144336 382046 00% /data/sdb2[root@centos7 ~]# umount /data/sdb2[root@centos7 ~]# e2fsck /dev/sdb2 -ye2fsck 1.42.9 (28-Dec-2013)test: ***** FILE SYSTEM WAS MODIFIED *****test: 11/102400 files (0.0% non-contiguous), 23445/409600 blocks[root@centos7 ~]# tune2fs -l /dev/sdb2tune2fs 1.42.9 (28-Dec-2013)...正常显示,省略...[root@centos7 ~]# mount /dev/sdb2 /data/sdb2/[root@centos7 ~]# ls /data/sdb2/ #虽然恢复了,但文件未找回lost+found[root@centos7 ~]#
2)centos8系统
[root@centos8 ~]# mount /dev/sdb2 /mnt[root@centos8 ~]# cp /etc/fstab /mnt/f1[root@centos8 ~]# cp /etc/fstab /mnt/f2[root@centos8 ~]# ls /mntf1 f2 lost+found[root@centos8 ~]# dd if=/dev/zero of=/dev/sdb2 bs=1M count=11+0 records in1+0 records out1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00128317 s, 817 MB/s[root@centos8 ~]# ls /mnt[root@centos8 ~]# tune2fs -l /dev/sdb2tune2fs 1.44.6 (5-Mar-2019)tune2fs: Bad magic number in super-block while trying to open /dev/sdb2[root@centos8 ~]# umount /mnt[root@centos8 ~]# e2fsck /dev/sdb2 -ye2fsck 1.44.6 (5-Mar-2019)test: ***** FILE SYSTEM WAS MODIFIED *****test: 13/131072 files (0.0% non-contiguous), 26158/524288 blocks[root@centos8 ~]# mount /dev/sdb2 /mnt[root@centos8 ~]# ls /mnt ##数据不一定能恢复,破坏的时候,如果覆盖了文件,那就不能恢复了f1 f2 lost+found[root@centos8 ~]# cat /mnt/f1UUID=f7f53add-b184-4ddc-8d2c-5263b84d1e15 / xfs defaults 0 0UUID=5c2216e3-ae34-444e-aa60-83cbaebb47e7 /boot ext4 defaults 1 2UUID=9a2293a8-9277-4b18-bae1-498e0b9da145 /data xfs defaults 0 0UUID=eebe3bc7-6d52-4ad9-86aa-916f1a123fd4 swap swap defaults 0 0[root@centos8 ~]#
3、xfs_repair:xfs文件系统专用检测修复工具-f #修复文件-n #只检查-d #允许修复只读的挂载设备,在单用户(init 1)下修复 / 时使用,然后立即reboot
2.4 挂载挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为
卸载:为解除此关联关系的过程
把设备关联挂载点:mount Point
挂载点下原有文件在挂载完成后会被临时隐藏,因此,挂载点目录一般为空
进程正在使用中的设备无法被卸载
2.4.1 挂载文件系统mount格式:
mount [-fnrsvw] [-t vfstype] [-o options] device mountpointdevice #指明要挂载的设备mountpoint #挂载点目录必须事先存在,建议使用空目录#设备文件: 例如:/dev/sda5#卷标:-L 'LABEL' 例如 -L 'MYDATA'#UUID: -U 'UUID' 例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'#伪文件系统名称:proc, sysfs, devtmpfs, configfs
mount常用命令选项
-t vsftype #指定要挂载的设备上的文件系统类型-r readonly #只读挂载-w read and write #读写挂载-n #不更新/etc/mtab,mount不可见-a #自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)-L 'LABEL' #以卷标指定挂载设备-U 'UUID' #以UUID指定要挂载的设备-B, --bind #绑定目录到另一个目录上-o options:(挂载文件系统的选项),多个选项使用逗号分隔 async #异步模式,内存更改时,写入缓存区buffer,过一段时间再写到磁盘中,效率高,但不安全 sync #同步模式,内存更改时,同时写磁盘,安全,但效率低下 atime/noatime #包含目录和文件 diratime/nodiratime #目录的访问时间戳 auto/noauto #是否支持开机自动挂载,是否支持-a选项 exec/noexec #是否支持将文件系统上运行应用程序 dev/nodev #是否支持在此文件系统上使用设备文件 suid/nosuid #是否支持suid和sgid权限 remount #重新挂载 ro/rw #只读、读写 user/nouser #是否允许普通用户挂载此设备,/etc/fstab使用 acl/noacl #启用此文件系统上的acl功能 loop #使用loop设备 _netdev #当网络可用时才对网络资源进行挂载,如:NFS文件系统 defaults #相当于rw, suid, dev, exec, auto, nouser, async
挂载规则:
- 一个挂载点同一时间只能挂载一个设备
- 一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
- 一个设备可以同时挂载到多个挂载点
- 通常挂载点一般是已存在的空目录
范例:
一个设备可以同时挂载到多个挂载点[root@centos7 ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsdb 8:16 0 2G 0 disk├─sdb1 8:17 0 500M 0 part└─sdb2 8:18 0 400M 0 part[root@centos7 ~]# mkdir /mnt/test[root@centos7 ~]# mount /dev/sdb1 /mnt/test[root@centos7 ~]# ls /mnt/test/[root@centos7 ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsdb 8:16 0 2G 0 disk├─sdb1 8:17 0 500M 0 part /mnt/test└─sdb2 8:18 0 400M 0 part[root@centos7 ~]# touch /mnt/test/f{1..5}.txt[root@centos7 ~]# ls /mnt/testf1.txt f2.txt f3.txt f4.txt f5.txt[root@centos7 ~]# mkdir /mnt/sdb1;mount /dev/sdb1 /mnt/sdb1[root@centos7 ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTdb 8:16 0 2G 0 disk├─sdb1 8:17 0 500M 0 part /mnt/sdb1└─sdb2 8:18 0 400M 0 part[root@centos7 ~]# mount/dev/sdb1 on /mnt/test type xfs (rw,relatime,attr2,inode64,noquota)/dev/sdb1 on /mnt/sdb1 type xfs (rw,relatime,attr2,inode64,noquota)[root@centos7 ~]# ls /mnt/test/f1.txt f2.txt f3.txt f4.txt f5.txt[root@centos7 ~]# ls /mnt/sdb1/f1.txt f2.txt f3.txt f4.txt f5.txt[root@centos7 ~]# rm -f /mnt/test/f5.txt[root@centos7 ~]# ls /mnt/sdb1/f1.txt f2.txt f3.txt f4.txt[root@centos7 ~]#一个挂载点同一时间只能挂载一个设备一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏#挂载点test同时挂载了sdb1和sdb2两个设备,只能看到最后一个设备sdb2的数据,sdb1的数据被隐藏,当取消sdb2的挂载后,恢复sdb1的挂载数据。[root@centos7 ~]# mount /dev/sdb2 /mnt/test #把sdb2挂载到test[root@centos7 ~]# ls /mnt/test #没有文件,这是挂载的sdb2lost+found[root@centos7 ~]# mount /dev/sdb1 on /mnt/test type xfs (rw,relatime,attr2,inode64,noquota) /dev/sdb1 on /mnt/sdb1 type xfs (rw,relatime,attr2,inode64,noquota)/dev/sdb2 on /mnt/test type ext4 (rw,relatime,data=ordered)[root@centos7 ~]# ls /mnt/sdb1/ #原来挂载的sdb1不变f1.txt f2.txt f3.txt f4.txt[root@centos7 ~]# touch /mnt/test/sdb2.txt[root@centos7 ~]# ls /mnt/testlost+found sdb2.txt[root@centos7 ~]# umount /dev/sdb2 #取消挂载[root@centos7 ~]# ls /mnt/test/ #恢复挂载sdb1f1.txt f2.txt f3.txt f4.txt通常挂载点一般是已存在的空目录,如果该目录有文件,可以隐藏该目录的文件。[root@centos7 ~]# mkdir /mnt/test2[root@centos7 ~]# touch /mnt/test2/test2.txt #在此目录下创建test2文件[root@centos7 ~]# ls /mnt/testf1.txt f2.txt f3.txt f4.txt[root@centos7 ~]# ls /mnt/test2test2.txt[root@centos7 ~]# mount /dev/sdb2 /mnt/test2 #挂载sdb2到test2目录[root@centos7 ~]# mount/dev/sdb1 on /mnt/test type xfs (rw,relatime,attr2,inode64,noquota)/dev/sdb1 on /mnt/sdb1 type xfs (rw,relatime,attr2,inode64,noquota)/dev/sdb2 on /mnt/test2 type ext4 (rw,relatime,data=ordered)[root@centos7 ~]# ls /mnt/test2 #test2显示的就是sdb2设备的文件lost+found sdb2.txt[root@centos7 ~]# umount /mnt/test2 #取消挂载后,显示原目录的文件[root@centos7 ~]# ls /mnt/test2test2.txt
使用UUID和LABEL来挂载
范例:
1)UUID挂载[root@centos7 ~]# umount -a[root@centos7 ~]# blkid/dev/sda1: UUID="4d6ce1ba-16ec-4d37-951c-afd012231267" TYPE="xfs"/dev/sda2: UUID="H4mKHO-71FU-bAUR-InNX-ji0g-nuN3-BjOQLe" TYPE="LVM2_member"/dev/sdb1: UUID="f2964200-c6b8-49af-a507-7be6a1da8db9" TYPE="xfs"/dev/sdb2: LABEL="test" UUID="39b10cb6-ff63-46b2-a037-b952ad8d38ab" TYPE="ext4"[root@centos7 ~]# mount UUID="f2964200-c6b8-49af-a507-7be6a1da8db9" /mnt/test[root@centos7 ~]# mount/dev/sdb1 on /mnt/test type xfs (rw,relatime,attr2,inode64,noquota)[root@centos7 ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsdb 8:16 0 2G 0 disk├─sdb1 8:17 0 500M 0 part /mnt/test└─sdb2 8:18 0 400M 0 part[root@centos7 ~]# ls /mnt/testf1.txt f2.txt f3.txt f4.txt2)LABEL挂载[root@centos7 ~]# lsblk -fNAME FSTYPE LABEL UUID MOUNTPOINTsdb├─sdb1 xfs f2964200-c6b8-49af-a507-7be6a1da8db9└─sdb2 ext4 test 39b10cb6-ff63-46b2-a037-b952ad8d38ab[root@centos7 ~]# mount LABEL=test /mnt/sdb2mount: mount point /mnt/sdb2 does not exist[root@centos7 ~]# mount LABEL=test /mnt/test2/[root@centos7 ~]# ls /mnt/test2lost+found sdb2.txt[root@centos7 ~]# mount/dev/sdb2 on /mnt/test2 type ext4 (rw,relatime,data=ordered)
范例:只读挂载
-r 只读挂载[root@centos7 ~]# umount /dev/sdb2[root@centos7 ~]# mount -r LABEL=test /mnt/test2[root@centos7 ~]# touch /mnt/test2/123touch: cannot touch ‘/mnt/test2/123’: Read-only file system[root@centos7 ~]# rm -f /mnt/test2/sdb2.txtrm: cannot remove ‘/mnt/test2/sdb2.txt’: Read-only file system[root@centos7 ~]# mount/dev/sdb2 on /mnt/test2 type ext4 (ro,relatime,data=ordered) #ro只读[root@centos7 ~]#[root@centos7 ~]# mount -o remount,rw /mnt/test2 #修改挂载权限为rw[root@centos7 ~]# touch /mnt/test2/123[root@centos7 ~]# ls /mnt/test2123 lost+found sdb2.txt[root@centos7 ~]# mount/dev/sdb2 on /mnt/test2 type ext4 (rw,relatime,data=ordered) #rw读写权限
范例:目录挂载
-B:目录挂载#把/etc目录挂载到/mnt/etc下[root@centos7 ~]# mkdir /mnt/etc;mount -B /etc /mnt/etc[root@centos7 ~]# ll /etc/issue /mnt/etc/issue-rw-r--r-- 1 root root 23 Apr 8 2020 /etc/issue-rw-r--r-- 1 root root 23 Apr 8 2020 /mnt/etc/issue[root@centos7 ~]# echo 'welcome to magedu' >>/mnt/etc/issue #修改/mnt/etc/issue文件内容[root@centos7 ~]# cat /etc/issue #/etc/issue随之改变\SKernel \r on an \mwelcome to magedu[root@centos7 ~]# ll /etc/issue /mnt/etc/issue #文件相同-rw-r--r-- 1 root root 41 Feb 23 13:20 /etc/issue-rw-r--r-- 1 root root 41 Feb 23 13:20 /mnt/etc/issue[root@centos7 ~]# ll /etc/issue /mnt/etc/issue -i #节点号也相同16778149 -rw-r--r-- 1 root root 41 Feb 23 13:20 /etc/issue16778149 -rw-r--r-- 1 root root 41 Feb 23 13:20 /mnt/etc/issue备注:当发现两个文件的节点号相同,但链接数还是1的时候,那么可以查看mount挂载[root@centos7 ~]# mount/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,noquota)/dev/mapper/centos-root on /mnt/etc type xfs (rw,relatime,attr2,inode64,noquota)
范例:noatime
-o 修改访问时间权限[root@centos7 ~]# mount /dev/sdb1 /mnt/sdb1[root@centos7 /]# mount #时间权限为relatime 实时更新/dev/sdb1 on /mnt/sdb1 type xfs (rw,relatime,attr2,inode64,noquota)[root@centos7 /]# echo 'hello' >/mnt/sdb1/f1.txt[root@centos7 /]# ll /mnt/sdb1 --time=atime -ttotal 4-rw-r--r-- 1 root root 6 Feb 23 10:11 f1.txt-rw-r--r-- 1 root root 0 Feb 23 10:11 f2.txt-rw-r--r-- 1 root root 0 Feb 23 10:11 f3.txt-rw-r--r-- 1 root root 0 Feb 23 10:11 f4.txt[root@centos7 /]# mount -o remount,noatime /mnt/sdb1 #时间权限修改为noatime,不更新[root@centos7 /]# mount/dev/sdb1 on /mnt/sdb1 type xfs (rw,noatime,attr2,inode64,noquota)[root@centos7 /]# stat /mnt/sdb1/f1.txt File: ‘/mnt/sdb1/f1.txt’ Size: 6 Blocks: 8 IO Block: 4096 regular fileDevice: 811h/2065d Inode: 67 Links: 1Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)Access: 2021-02-23 10:11:00.817035877 +0800Modify: 2021-02-23 13:57:04.344601237 +0800Change: 2021-02-23 13:57:04.344601237 +0800 Birth: -[root@centos7 /]# stat /mnt/sdb1/f2.txt File: ‘/mnt/sdb1/f2.txt’ Size: 0 Blocks: 0 IO Block: 4096 regular empty fileDevice: 811h/2065d Inode: 68 Links: 1Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)Access: 2021-02-23 10:11:00.817035877 +0800Modify: 2021-02-23 10:11:00.817035877 +0800Change: 2021-02-23 10:11:00.817035877 +0800 Birth: -[root@centos7 /]# cat /mnt/sdb1/f2.txt[root@centos7 /]# ll /mnt/sdb1 --time=atime -ttotal 4-rw-r--r-- 1 root root 6 Feb 23 10:11 f1.txt-rw-r--r-- 1 root root 0 Feb 23 10:11 f2.txt-rw-r--r-- 1 root root 0 Feb 23 10:11 f3.txt-rw-r--r-- 1 root root 0 Feb 23 10:11 f4.txt[root@centos7 /]# mount -o remount,relatime /mnt/sdb1 #改回relatime[root@centos7 /]# mount/dev/sdb1 on /mnt/sdb1 type xfs (rw,noatime,attr2,inode64,noquota) #但不生效,why
centos8
1)默认挂载,访问文件,时间改变[root@centos8110 ~]# mount #/data目录的时间权限为relatime/dev/sda5 on /data type xfs (rw,relatime,attr2,inode64,noquota)[root@centos8110 ~]# ll /data --time=atime -t #按访问时间排序total 16-rw-r--r-- 1 root root 64 Feb 8 02:23 sda.imgcrw-r--r-- 1 root root 1, 5 Feb 8 01:45 zero01crw-r--r-- 1 root root 1, 3 Feb 8 01:44 null01brw-r--r-- 1 root root 8, 1 Feb 8 01:39 partition-sda1-rw-r--r-- 1 root root 1003 Feb 1 21:49 passwd-rw-r--r-- 1 root root 150 Feb 1 21:33 sed.log-rw-r--r-- 1 root root 1080 Feb 1 21:12 passwd.bak[root@centos8110 ~]# cat /data/passwdbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin...省略...[root@centos8110 ~]# ll /data --time=atime -ttotal 16-rw-r--r-- 1 root root 1003 Feb 23 14:23 passwd #passwd文件的访问时间修改了-rw-r--r-- 1 root root 64 Feb 23 14:22 sda.imgcrw-r--r-- 1 root root 1, 5 Feb 8 14:45 zero01crw-r--r-- 1 root root 1, 3 Feb 8 14:44 null01brw-r--r-- 1 root root 8, 1 Feb 8 14:39 partition-sda1-rw-r--r-- 1 root root 150 Feb 2 10:33 sed.log-rw-r--r-- 1 root root 1080 Feb 2 10:12 passwd.bak[root@centos8110 ~]# stat /data/passwdAccess: 2021-02-23 14:23:07.591307881 +0800 #访问时间为今天Modify: 2021-02-02 10:48:57.880932327 +0800Change: 2021-02-02 10:48:57.881932346 +0800 Birth: -2)关闭访问时间,noatime,访问文件时,时间不变[root@centos8110 ~]# mount -o remount,noatime /data #关闭访问时间[root@centos8110 ~]# mount/dev/sda5 on /data type xfs (rw,noatime,attr2,inode64,noquota)[root@centos8110 ~]# ll /data --time=atime -t total 16-rw-r--r-- 1 root root 1003 Feb 23 14:23 passwd-rw-r--r-- 1 root root 64 Feb 23 14:22 sda.imgcrw-r--r-- 1 root root 1, 5 Feb 8 14:45 zero01crw-r--r-- 1 root root 1, 3 Feb 8 14:44 null01brw-r--r-- 1 root root 8, 1 Feb 8 14:39 partition-sda1-rw-r--r-- 1 root root 150 Feb 2 10:33 sed.log-rw-r--r-- 1 root root 1080 Feb 2 10:12 passwd.bak[root@centos8110 ~]# stat /data/sed.logAccess: 2021-02-02 10:33:26.639651099 +0800Modify: 2021-02-02 10:33:22.826580812 +0800Change: 2021-02-02 10:33:22.826580812 +0800[root@centos8110 ~]# cat /data/sed.log #访问sed.log文件daemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/sync[root@centos8110 ~]# ll /data --time=atime -ttotal 16-rw-r--r-- 1 root root 1003 Feb 23 14:23 passwd-rw-r--r-- 1 root root 64 Feb 23 14:22 sda.imgcrw-r--r-- 1 root root 1, 5 Feb 8 14:45 zero01crw-r--r-- 1 root root 1, 3 Feb 8 14:44 null01brw-r--r-- 1 root root 8, 1 Feb 8 14:39 partition-sda1-rw-r--r-- 1 root root 150 Feb 2 10:33 sed.log #访问时间未更新-rw-r--r-- 1 root root 1080 Feb 2 10:12 passwd.bak[root@centos8110 ~]# stat /data/sed.log #未更新Access: 2021-02-02 10:33:26.639651099 +0800Modify: 2021-02-02 10:33:22.826580812 +0800Change: 2021-02-02 10:33:22.826580812 +08003)重新加载访问时间[root@centos8110 ~]# mount -o remount,relatime /data[root@centos8110 ~]# mount/dev/sda5 on /data type xfs (rw,relatime,attr2,inode64,noquota)[root@centos8110 ~]# stat /data/sed.logAccess: 2021-02-02 10:33:26.639651099 +0800Modify: 2021-02-02 10:33:22.826580812 +0800Change: 2021-02-02 10:33:22.826580812 +0800[root@centos8110 ~]# cat /data/sed.logdaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/sync[root@centos8110 ~]# stat /data/sed.logAccess: 2021-02-23 14:41:38.206777189 +0800Modify: 2021-02-02 10:33:22.826580812 +0800Change: 2021-02-02 10:33:22.826580812 +0800[root@centos8110 ~]# ll /data --time=atime -ttotal 16-rw-r--r-- 1 root root 150 Feb 23 14:41 sed.log-rw-r--r-- 1 root root 1003 Feb 23 14:23 passwd备注:对于访问量大的网站来说,禁用noatime访问时间更新,会优化5%的访问性能。
范例:文件挂载,当U盘使用
1)初始化文件disk.img,格式化ext4文件系统,并挂载到/mnt/loop下[root@centos7 /]# dd if=/dev/zero of=/data/disk.img bs=1M count=100100+0 records in100+0 records out104857600 bytes (105 MB) copied, 0.524238 s, 200 MB/s[root@centos7 /]# ll /data/disk.img -h-rw-r--r-- 1 root root 100M Feb 23 14:58 /data/disk.img[root@centos7 /]# mkfs.ext4 /data/disk.imgmke2fs 1.42.9 (28-Dec-2013)Allocating group tables: doneWriting inode tables: doneCreating journal (4096 blocks): doneWriting superblocks and filesystem accounting information: done[root@centos7 /]# blkid /data/disk.img/data/disk.img: UUID="34dac92a-e905-4114-886d-0e48b1007635" TYPE="ext4"[root@centos7 /]# mkdir /mnt/loop[root@centos7 /]# mount /data/disk.img /mnt/loop[root@centos7 /]# ll /dev/loop*brw-rw---- 1 root disk 7, 0 Feb 23 14:59 /dev/loop0crw-rw---- 1 root disk 10, 237 Feb 23 14:59 /dev/loop-control[root@centos7 /]# dfFilesystem 1K-blocks Used Available Use% Mounted on/dev/loop0 95054 1550 86336 2% /mnt/loop[root@centos7 /]# losetup -a/dev/loop0: [64768]:33704142 (/data/disk.img)[root@centos7 /]# cp /etc/redhat-release /mnt/loop/[root@centos7 /]# ll //mnt/loop/-rw-r--r-- 1 root root 37 Feb 23 15:00 redhat-release[root@centos7 /]# cat /mnt/loop/redhat-releaseCentOS Linux release 7.8.2003 (Core)[root@centos7 /]# scp /data/disk.img 192.168.209.110:/dataroot@192.168.209.110's password:disk.img 2)复制到centos8系统下,挂载到一个目录中,就可以访问其中的文件了,相当于U盘使用。[root@centos8110 ~]# ll /data/disk.img -h-rw-r--r-- 1 root root 100M Feb 23 15:01 /data/disk.img[root@centos8110 ~]# blkid /data/disk.img #同centos7下的UUID/data/disk.img: UUID="34dac92a-e905-4114-886d-0e48b1007635" TYPE="ext4"[root@centos8110 ~]# mkdir /mnt/disk;mount /data/disk.img /mnt/disk[root@centos8110 ~]# ll /mnt/disk #可以看到centos7下的文件-rw-r--r-- 1 root root 37 Feb 23 15:00 redhat-release[root@centos8110 ~]# mount/data/disk.img on /mnt/disk type ext4 (rw,relatime)[root@centos8110 ~]# file /data/disk.img #提示该文件是ext4文件系统/data/disk.img: Linux rev 1.0 ext4 filesystem data, UUID=34dac92a-e905-4114-886d-0e48b1007635 (needs journal recovery) (extents) (64bit) (huge files)
2.4.2 卸载文件系统 umount卸载时:可使用设备,也可以使用挂载点
umount 设备名|挂载点umount /dev/sdb1umount /mnt/sdb1
卸载范例:
1)在该目录中,或文件正使用中,卸载失败[root@centos7 ~]# cd /mnt/test2[root@centos7 test2]# pwd/mnt/test2[root@centos7 test2]# umount /mnt/test2umount: /mnt/test2: target is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1))2)其他终端访问该目录或文件的时候,卸载失败#打开一个终端,使用wang账号访问test2目录[root@centos7 ~]# su wang[wang@centos7 root]$ cd /mnt/test2[wang@centos7 test2]$ ls123 lost+found sdb2.txt#查看哪些账号或终端在访问test2目录[root@centos7 ~]# lsof /dev/sdb2 #或lsof /mnt/test2COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEbash 38775 root cwd DIR 8,18 1024 2 /mnt/test2bash 57066 root cwd DIR 8,18 1024 2 /mnt/test2bash 57538 wang cwd DIR 8,18 1024 2 /mnt/test2[root@centos7 ~]# fuser -v /mnt/test2 #查看哪些用户或终端在访问 USER PID ACCESS COMMAND/mnt/test2: root kernel mount /mnt/test2 root 38775 ..c.. bash root 57066 ..c.. bash wang 57538 ..c.. bash#此时,不能卸载[root@centos7 ~]# umount /mnt/test2umount: /mnt/test2: target is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1))#使用km选项强制踢出,就可以卸载了 [root@centos7 ~]# fuser -km /mnt/test2/mnt/test2: 38775c 57066c 57538c[root@centos7 ~]# lsof /mnt/test2[root@centos7 ~]# umount /mnt/test2
2.4.3 查看挂载情况查看挂载
#通过查看/etc/mtab文件显示当前已挂载的所有设备mount#查看内核追踪到的已挂载的所有设备cat /proc/mounts
查看挂载点情况:
findmnt MOUNT_POINT|device
范例:
[root@centos8110 ~]# mount/dev/sda5 on /data type xfs (rw,relatime,attr2,inode64,noquota)/dev/sda1 on /boot type ext4 (rw,relatime)/data/disk.img on /mnt/disk type ext4 (rw,relatime)[root@centos8110 ~]# findmnt /dataTARGET SOURCE FSTYPE OPTIONS/data /dev/sda5 xfs rw,relatime,attr2,inode64,noquota[root@centos8110 ~]# findmnt /mnt/diskTARGET SOURCE FSTYPE OPTIONS/mnt/disk /dev/loop0 ext4 rw,relatime[root@centos8110 ~]# findmnt /etc #未挂载[root@centos8110 ~]# echo $?1
2.4.4 练习创建一个2G的文件系统,块大小为2048byte,预留1%可用空间,文件系统 ext4,卷标为TEST,要求此分区开机后自动挂载至/test目录,且默认有acl挂载选项
1)非交互式创建2G分区[root@centos7 ~]# echo -e 'n\np\n1\n\n+2G\nw\n' |fdisk /dev/sdb[root@centos7 ~]# fdisk -l /dev/sdb Device Boot Start End Blocks Id System/dev/sdb1 2048 4196351 2097152 83 Linux[root@centos7 ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda 8:0 0 20G 0 disk├─sda1 8:1 0 1G 0 part /boot└─sda2 8:2 0 19G 0 part ├─centos-root 253:0 0 17G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP]sdb 8:16 0 3G 0 disk└─sdb1 8:17 0 2G 0 part #分配的2G分区sr0 11:0 1 10G 0 rom[root@centos7 ~]# blkid #无/dev/sdb1/dev/sda1: UUID="4d6ce1ba-16ec-4d37-951c-afd012231267" TYPE="xfs"/dev/sda2: UUID="H4mKHO-71FU-bAUR-InNX-ji0g-nuN3-BjOQLe" TYPE="LVM2_member"/dev/mapper/centos-root: UUID="5753dc79-bc4e-4514-9eb7-56e5bbaa5dff" TYPE="xfs"/dev/mapper/centos-swap: UUID="da97a9bd-58d9-4770-92d8-07b6bd64ac1c" TYPE="swap"2)创建ext4文件类型,块大小2048byte,预留空间1%,卷标TEST[root@centos7 ~]# mkfs.ext4 -b 2048 -m 1 -L TEST /dev/sdb1[root@centos7 ~]# tune2fs -l /dev/sdb1 #查看分区的元数据tune2fs 1.42.9 (28-Dec-2013)Filesystem volume name: TEST #卷标TESTLast mounted on: <not available>Filesystem UUID: b9c3f582-b345-4732-80d0-173e7f2acf92Filesystem magic number: 0xEF53Filesystem revision #: 1 (dynamic)Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isizeFilesystem flags: signed_directory_hashDefault mount options: user_xattr acl #默认已开通acl权限Filesystem state: cleanErrors behavior: ContinueFilesystem OS type: LinuxInode count: 131072Block count: 1048576Reserved block count: 10485 #预留1%Free blocks: 994651Free inodes: 131061First block: 0Block size: 2048 #块大小为2048Fragment size: 2048Group descriptor size: 64Reserved GDT blocks: 512Blocks per group: 16384Fragments per group: 16384Inodes per group: 2048Inode blocks per group: 256Flex block group size: 16Filesystem created: Wed Feb 24 14:35:38 2021Last mount time: n/aLast write time: Wed Feb 24 14:35:39 2021Mount count: 0Maximum mount count: -1Last checked: Wed Feb 24 14:35:38 2021Check interval: 0 (<none>)Lifetime writes: 65 MBReserved blocks uid: 0 (user root)Reserved blocks gid: 0 (group root)First inode: 11Inode size: 256Required extra isize: 28Desired extra isize: 28Journal inode: 8Default directory hash: half_md4Directory Hash Seed: b80119b1-d98a-475c-ba60-25319b966059Journal backup: inode blocks[root@centos7 ~]# lsblk -f #查看文件类型和卷标UUID等NAME FSTYPE LABEL UUID MOUNTPOINTsdb└─sdb1 ext4 TEST b9c3f582-b345-4732-80d0-173e7f2acf923)自动挂载到/test目录[root@centos7 ~]# mkdir /test[root@centos7 ~]# blkid /dev/sdb1/dev/sdb1: LABEL="TEST" UUID="b9c3f582-b345-4732-80d0-173e7f2acf92" TYPE="ext4"[root@centos7 ~]# vim /etc/fstab[root@centos7 ~]# cat /etc/fstab #使用UUID挂载到/etc/fstab中UUID=b9c3f582-b345-4732-80d0-173e7f2acf92 /test ext4 defaults 0 0[root@centos7 ~]# mount -a[root@centos7 ~]# mount/dev/sdb1 on /test type ext4 (rw,relatime,data=ordered)[root@centos7 ~]# cp /etc/redhat-release /test[root@centos7 ~]# ll /test-rw-r--r-- 1 root root 37 Feb 24 14:56 redhat-release[root@centos7 ~]# reboot #重启后依然有效[root@centos7 ~]# ll /test-rw-r--r-- 1 root root 37 Feb 24 14:56 redhat-release
3 RAID3.1 什么是RAIDRAID:Redundant Arrays of Inexpensive(Independent) Disks 廉价(独立)磁盘冗余阵列1988年由加利福尼亚大学伯克利分校(University of California-Berkeley) “A Case for RedundantArrays of Inexpensive Disks”,多个磁盘合成一个”阵列“来提供更好的性能、冗余,或者两者都提供
磁盘阵列是把多个磁盘组成一个阵列,当作单一磁盘使用,它将数据以分段或条带(striping)的方式储存在不同的磁盘中。存取数据时,阵列中的相关磁盘一起动作,大幅减低数据的存取时间,同时有更佳的空间利用率。磁盘阵列利用的不同的技术称为RAID level,不同的level针对不同的系统及应用,以解决数据安全的问题。简单来说,RAID把多个硬盘组合成为一个逻辑扇区。因此,操作系统只会把它当作一个硬盘。
RAID功能实现
- 提高IO能力,磁盘并行读写
- 提高耐用性,磁盘冗余算法来实现
RAID实现的方式
- 外接式磁盘阵列:通过扩展卡提供适配能力
- 内接式RAID:主板集成RAID控制器,安装OS前在BIOS里配置
- 软件RAID:通过OS实现,比如:群晖的NAS
级别:多块磁盘组织在一起的工作方式有所不同
RAID-0:条带卷,strip
RAID-1:镜像卷,mirror
RAID-5、RAID-6、RAID-10、RAID-01、RAID-50等
3.2.1 RAID-0RAID 0 数据分条(条带)盘 --- 只需要2块以上的硬盘,成本低,可以提高整个磁盘的性能和吞吐量。
striping(条带模式),至少需要两块磁盘,做RAID分区的大小最好是相同的(可以充分发挥并优势);而数据分散存储于不同的磁盘上,在读写的时候可以实现并发,所以相对其读写性能最好;但是没有容错功能,任何一个磁盘的损坏将损坏全部数据。
- 以 chunk 单位,读写数据
- 读、写性能提升
- 可用空间:N*min(S1,S2,...)---即100%
- 无容错能力----任何一块硬盘损坏都会丢失数据
- 最少磁盘数:2, 2+
RAID 1 磁盘镜像盘 --- 数据在写入一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件。
mirroring(镜 像卷),至少需要两块硬盘,raid大小等于两个raid分区中最小的容量(最好将分区大小分为一样),可增加热备盘提供一定的备份能力;
数据有冗余,在存储时同时写入两块硬盘,实现了数据备份;
但相对降低了写入性能,但是读取数据时可以并发,几乎类似于raid-0的读取效率;
- 读性能提升、写性能略有下降
- 可用空间:1*min(S1,S2,...)---即50%
- 有冗余能力
- 最少磁盘数:2, 2N
RAID 3 奇偶校验码的并行传送 --- 只能查错不能纠错
RAID 4 带奇偶校验码的独立磁盘结构 --- 对数据的访问是按数据块进行的,也就是按磁盘进行的,RAID3是一次一横条,而RAID4一次一竖条。
- 多块数据盘异或运算值存于专用校验盘
- 磁盘利用率 (N-1)/N
- 有冗余能力
- 至少3块硬盘才可以实现
需要三块或以上硬盘,可以提供热备盘实现故障的恢复;采用奇偶效验,可靠性强,且只有同时损坏两块硬盘时数据才会完全损坏,只损坏一块硬盘时,系统会根据存储的奇偶校验位重建数据,临时提供服务;此时如果有热备盘,系统还会自动在热备盘上重建故障磁盘上的数据。
- 读、写性能提升
- 可用空间:(N-1)*min(S1,S2,...)----即(n-1)/n
- 有容错能力:允许最多1块磁盘损坏
- 最少磁盘数:3, 3+
RAID 6 带有两种分布存储的奇偶校验码的独立磁盘结构
- 读、写性能提升
- 可用空间:(N-2)*min(S1,S2,...)----即(n-2)/n
- 有容错能力:允许最多2块磁盘损坏
- 最少磁盘数:4, 4+
高可靠性与高效磁盘结构
- 读、写性能提升
- 可用空间:N*min(S1,S2,...)/2,只有50%磁盘利用率
- 有容错能力:每组镜像最多只能坏一块
- 最少磁盘数:4, 4+
多块磁盘先实现RAID0,再组合成RAID1,也只有50%磁盘利用率
RAID1+0与RAID0+1的区别:
RAID 1+0是先镜射再分区数据,再将所有硬盘分为两组,视为是RAID 0的最低组合,然后将这两组各自视为RAID 1运作。RAID 0+1则是跟RAID 1+0的程序相反,是先分区再将数据镜射到两组硬盘。它将所有的硬盘分为两组,变成RAID 1的最低组合,而将两组硬盘各自视为RAID 0运作。性能上,RAID 0+1比RAID 1+0有着更快的读写速度。可靠性上,当RAID 1+0有一个硬盘受损,其余三个硬盘会继续运作。RAID 0+1 只要有一个硬盘受损,同组RAID 0的另一只硬盘亦会停止运作,只剩下两个硬盘运作,可靠性较低。因此,RAID 10远较RAID 01常用,零售主板绝大部份支持RAID 0/1/5/10,但不支持RAID 01。
3.2.8 RAID-50多块磁盘先实现RAID5,再组合成RAID0
常见 RAID 总结
LVM: Logical Volume Manager 可以允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小,
允许在多个物理设备间重新组织文件系统,LVM可以弹性的更改LVM的容量。
通过交换PE来进行资料的转换,将原来LV内的PE转移到其他的设备中以降低LV的容量,或将其他设备
中的PE加到LV中以加大容量。
实现过程
- 将设备指定为物理卷
- 用一个或者多个物理卷来创建一个卷组,物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的
- 在物理卷上创建的逻辑卷, 是由物理区域(PE)组成
- 可以在逻辑卷上创建文件系统并挂载
第一个逻辑卷对应设备名:/dev/dm-#
dm: device mapper,将一个或多个底层块设备组织成一个逻辑设备的模块
软链接:
- /dev/mapper/VG_NAME-LV_NAME
- /dev/VG_NAME/LV_NAME
范例:查看逻辑卷
/dev/mapper/vol0-root/dev/vol0/root[root@centos7 ~]# dfFilesystem 1K-blocks Used Available Use% Mounted ondevtmpfs 486084 0 486084 0% /devtmpfs 497840 0 497840 0% /dev/shmtmpfs 497840 7956 489884 2% /runtmpfs 497840 0 497840 0% /sys/fs/cgroup/dev/mapper/centos-root 17811456 2938680 14872776 17% //dev/sda1 1038336 197052 841284 19% /boottmpfs 99572 0 99572 0% /run/user/0[root@centos7 ~]# ll /dev/mapper/centos-rootlrwxrwxrwx 1 root root 7 Feb 24 16:42 /dev/mapper/centos-root -> ../dm-0[root@centos7 ~]# ll /dev/mapper/centos-swaplrwxrwxrwx 1 root root 7 Feb 24 16:42 /dev/mapper/centos-swap -> ../dm-1[root@centos7 ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos -wi-ao---- <17.00g swap centos -wi-ao---- 2.00g[root@centos7 ~]# blkid/dev/sda1: UUID="4d6ce1ba-16ec-4d37-951c-afd012231267" TYPE="xfs"/dev/sda2: UUID="H4mKHO-71FU-bAUR-InNX-ji0g-nuN3-BjOQLe" TYPE="LVM2_member"/dev/sr0: UUID="2018-11-26-14-22-58-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"/dev/mapper/centos-root: UUID="5753dc79-bc4e-4514-9eb7-56e5bbaa5dff" TYPE="xfs"/dev/mapper/centos-swap: UUID="da97a9bd-58d9-4770-92d8-07b6bd64ac1c" TYPE="swap"[root@centos7 ~]# cat /etc/fstab/dev/mapper/centos-root / xfs defaults 0 0UUID=4d6ce1ba-16ec-4d37-951c-afd012231267 /boot xfs defaults 0 0/dev/mapper/centos-swap swap swap defaults 0 0
4.2 实现逻辑卷相关工具来自于 lvm2 包
[root@centos7 ~]# which pvcreate/usr/sbin/pvcreate[root@centos7 ~]# rpm -qf `which pvcreate`lvm2-2.02.186-7.el7_8.2.x86_64#如果没有lvm2,yum安装即可[root@centos8 ~]#yum -y install lvm2
4.2.1 pv管理工具显示pv信息
pvs #简要pv信息显示pvdisplay
创建pv
pvcreate /dev/DEVICE
删除pv
pvremove /dev/DEVICE
4.2.2 vg管理工具显示卷组
vgsvgdisplay
创建卷组
vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath[PhysicalDevicePath...]
管理卷组
vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
删除卷组
- 先做pvmove
- 再做vgremove
显示逻辑卷
lvsLvdisplay
创建逻辑卷
lvcreate -L|--size Size[m|UNIT] VG [ -l|--extents Number[PERCENT] ]lvcreate -L #[mMgGtT] -n NAME VolumeGrouplvcreate -l +PE的个数,如有1000个PE,每个为4M,就是分配4Glvcreate -L +分配的数值M或G等,如1000M,就是分配1G
范例:
lvcreate -l 60%VG -n mylv testvglvcreate -l 100%FREE -n yourlv testvg
删除逻辑卷
lvremove /dev/VG_NAME/LV_NAME
重设文件系统大小
fsadm [options] resize device [new_size[BKMGTEP]]resize2fs [-f] [-F] [-M] [-P] [-p] device [new_size]xfs_growfs /mountpoint
范例:
#创建物理卷pvcreate /dev/sda3#为卷组分配物理卷vgcreate vg0 /dev/sda3#从卷组创建逻辑卷lvcreate -L 256M -n data vg0#mkfs.xfs /dev/vg0/data#挂载mount /dev/vg0/data /mnt/data#
实例:
1)增加两块硬盘sdb3G,sdc2G,分区并调整为lvm卷[root@centos7 ~]# fdisk /dev/sdb #交互式分区Command (m for help): nSelect (default p): pPartition number (1-4, default 1): 1Command (m for help): tSelected partition 1Hex code (type L to list all codes): 8e #lvm卷Changed type of partition 'Linux' to 'Linux LVM'Command (m for help): w[root@centos7 ~]# fdisk -l /dev/sdb Device Boot Start End Blocks Id System/dev/sdb1 2048 2099199 1048576 8e Linux LVM #非交互式分区[root@centos7 ~]# echo -e 'n\np\n1\n\n+500M\nt\n8e\nw\n' |fdisk /dev/sdc[root@centos7 ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda 8:0 0 20G 0 disk├─sda1 8:1 0 1G 0 part /boot└─sda2 8:2 0 19G 0 part ├─centos-root 253:0 0 17G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP]sdb 8:16 0 3G 0 disk└─sdb1 8:17 0 1G 0 partsdc 8:32 0 2G 0 disk└─sdc1 8:33 0 500M 0 partsr0 11:0 1 10G 0 rom[root@centos7 ~]# hexdump -C /dev/sdc -n 512000001b0 00 00 00 00 00 00 00 00 db bc b6 62 00 00 00 20 |...........b... |000001c0 21 00 8e dd 1e 3f 00 08 00 00 00 a0 0f 00 00 00 |!....?..........|000001d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|00000200[root@centos7 ~]#2)创建物理卷pvcreate[root@centos7 ~]# pvcreate /dev/sdc1 Physical volume "/dev/sdc1" successfully created.[root@centos7 ~]# pvcreate /dev/sdb1WARNING: swap signature detected on /dev/sdb1 at offset 4086. Wipe it? [y/n]: y Wiping swap signature on /dev/sdb1. #sdb1上原有其他分区格式或系统,才有此提示 Physical volume "/dev/sdb1" successfully created.[root@centos7 ~]# pvs #查看新增的两个物理卷sdb1和sdb2 PV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a-- <19.00g 0 /dev/sdb1 lvm2 --- 1.00g 1.00g /dev/sdc1 lvm2 --- 500.00m 500.00m[root@centos7 ~]# pvdisplay #查看物理卷的详细信息 "/dev/sdb1" is a new physical volume of "1.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name PV Size 1.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID g7QD6p-hpTr-Ha0K-165n-mEqm-NS30-WiBe3t "/dev/sdc1" is a new physical volume of "500.00 MiB" --- NEW Physical volume --- PV Name /dev/sdc1 VG Name PV Size 500.00 MiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID b11Tex-iP7p-752f-QJD1-2YU3-sR7H-ujZ0UJ3)创建卷组vgcreate[root@centos7 ~]# vgs #查看安装系统时自动分配的卷组,卷组名是centos VG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- <19.00g 0#把设备sdb1和sdc1创建名为vg_mysql的卷组[root@centos7 ~]# vgcreate vg_mysql /dev/sdb1 /dev/sdc1 Volume group "vg_mysql" successfully created[root@centos7 ~]# vgs 查看创建的卷组 VG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- <19.00g 0 vg_mysql 2 0 0 wz--n- 1.48g 1.48g[root@centos7 ~]# vgdisplay #卷组的详细信息 --- Volume group --- VG Name vg_mysql #新建的卷组,名称是vg_mysql System ID Format lvm2 #版本是lvm2 Metadata Areas 2 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 1.48 GiB #卷组总容量大小:379*4M/1024=1.48G PE Size 4.00 MiB #每块物理卷大小 Total PE 379 #物理卷个数 Alloc PE / Size 0 / 0 #已分配的物理卷 Free PE / Size 379 / 1.48 GiB #未分配的物理卷 VG UUID e2zXZ8-jeGv-MZlU-9NmQ-3roN-B2vX-0sNfTD --- Volume group --- VG Name centos #原系统自带逻辑卷 System ID Format lvm2...省略...4)创建逻辑卷lvcreate#-n 逻辑卷的名称#-L 新建的逻辑卷大小,直接输入数值即可#-l 新建的逻辑卷大小,但是通过PE的数量计算出来的;-l +PE数量[root@centos7 ~]# lvcreate -n lv_data -L 900M vg_mysql Logical volume "lv_data" created.[root@centos7 ~]# pvdisplay #查看这900M来自哪个硬盘 --- Physical volume --- PV Name /dev/sdb1 VG Name vg_mysql PV Size 1.00 GiB / not usable 4.00 MiB Allocatable yes PE Size 4.00 MiB Total PE 255 #总的大小 Free PE 30 #剩余大小,即使用了(255-30)*4M=900M Allocated PE 225 PV UUID g7QD6p-hpTr-Ha0K-165n-mEqm-NS30-WiBe3t --- Physical volume --- PV Name /dev/