理论:
LVM:逻辑分区管理
PV(physical volume):物理卷在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区。
VG(volume group):卷组建立在物理卷上,一卷组中至少要包括一物理卷,卷组建立后可动态的添加卷到卷组中,一个 逻辑卷管理系统工程中可有多个卷组。
LV(logical volume):逻辑卷建立在卷组基础上,卷组中未分配空间可用于建立新的逻辑卷,逻辑卷建立后可以动态扩 展和缩小空间。
PE(physical extent):物理区域是物理卷中可用于分配的最小存储单元,物理区域大小在建立卷组时指定,一旦确定 不能更改,同一卷组所有物理卷的物理区域大小需一致,新的pv加入到vg后,pe的大小自动更改为vg中定义的pe大小。 LE(logical extent):逻辑卷也被划分为被称为LE,逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小 取决于逻辑卷所在卷组中的物理区域的大小。
准备物理磁盘 可以是: /dev/sdb /dev/sdc1
[root@newrain ~]# ll /dev/sd{b..d}
brw-rw---- 1 root disk 8, 16 Aug 5 21:22 /dev/sdb
brw-rw---- 1 root disk 8, 32 Aug 5 21:22 /dev/sdc
brw-rw---- 1 root disk 8, 48 Aug 5 21:22 /dev/sdd
[root@newrain ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
[root@newrain ~]# pvscan
PV /dev/sdb lvm2 [10.00 GiB]
Total: 2 [<19.00 GiB] / in use: 1 [<9.00 GiB] / in no VG: 1 [10.00 GiB]
[root@newrain ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <9.00g 0
/dev/sdb lvm2 --- 10.00g 10.00g
[root@newrain ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sdb
VG Name vg0
PV Size 10.00 GiB / not usable 16.00 MiB
Allocatable yes
PE Size 16.00 MiB
Total PE 639
Free PE 597
Allocated PE 42
PV UUID TmVLP4-jCIO-O3P3-CEQX-2ee1-4bP8-S1oJuc
[root@newrain ~]# vgcreate vg0 -s 16 /dev/sdb
Volume group "vg0" successfully created
[root@newrain ~]# vgscan
Reading volume groups from cache.
Found volume group "vg0" using metadata type lvm2
[root@newrain ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg0 1 0 0 wz--n- <10.00g <10.00g
[root@newrain ~]# vgdisplay
--- Volume group ---
VG Name vg0
System ID
Format lvm2
Metadata Areas 1
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 1
Act PV 1
VG Size <10.00 GiB
PE Size 16.00 MiB
Total PE 2559
Alloc PE / Size 0 / 0
Free PE / Size 2559 / <10.00 GiB
VG UUID ldk7py-bfmT-j4XK-X1OU-GWV8-b5QW-KrjB1i
[root@newrain ~]# lvcreate -l 10 -n lv0 vg0
Logical volume "lv0" created.
[root@newrain ~]# lvcreate -L 500M -n lv1 vg0
Rounding up size to full physical extent 512.00 MiB
Logical volume "lv1" created.
[root@newrain ~]# lvscan
ACTIVE '/dev/vg0/lv0' [160.00 MiB] inherit
ACTIVE '/dev/vg0/lv1' [512.00 MiB] inherit
[root@newrain ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <8.00g
swap centos -wi-ao---- 1.00g
lv0 vg0 -wi-a----- 160.00m
lv1 vg0 -wi-a----- 512.00m
[root@newrain ~]# lvdisplay
--- Logical volume ---
LV Path /dev/vg0/lv0
LV Name lv0
VG Name vg0
LV UUID UPc9Si-aUs2-nhwx-5ZP8-F2hl-PwSR-Z7piVL
LV Write Access read/write
LV Creation host, time newrain, 2019-08-05 21:33:30 -0400
LV Status available
# open 0
LV Size 160.00 MiB
Current LE 10
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
--- Logical volume ---
LV Path /dev/vg0/lv1
LV Name lv1
VG Name vg0
LV UUID MQTv6D-HUut-V1cc-gFwh-awYx-TOQm-5ayzKw
LV Write Access read/write
LV Creation host, time newrain, 2019-08-05 21:34:05 -0400
LV Status available
# open 0
LV Size 512.00 MiB
Current LE 32
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
[root@newrain ~]# mkfs.xfs /dev/vg0/lv0
[root@newrain ~]# mkfs.ext4 /dev/vg0/lv1
[root@newrain ~]# mkdir /mnt/lv0 /mnt/lv1
[root@newrain ~]# vim /etc/fstab
/dev/vg0/lv0 /mnt/lv0 xfs defaults 0 0
/dev/vg0/lv1 /mnt/lv1 ext4 defaults 0 0
[root@newrain ~]# mount -a
[root@newrain ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg0-lv0 160420 8416 152004 6% /mnt/lv0
/dev/mapper/vg0-lv1 499656 780 462180 1% /mnt/lv1
[root@newrain ~]# pvcreate /dev/sdc #将另一块盘创建为物理卷
Physical volume "/dev/sdc" successfully created.
[root@newrain ~]# vgextend vg0 /dev/sdc #卷组扩容
Volume group "vg0" successfully extended
[root@newrain ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg0 2 2 0 wz--n- <19.97g 19.31g
[root@newrain ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb vg0 lvm2 a-- 9.98g <9.33g
/dev/sdc vg0 lvm2 a-- 9.98g 9.98g
[root@newrain ~]# lvextend -L +2G /dev/vg0/lv0
Size of logical volume vg0/lv0 changed from 160.00 MiB (10 extents) to <2.16 GiB (138 extents).
Logical volume vg0/lv0 successfully resized.
[root@newrain ~]# lvextend -l +20 /dev/vg0/lv1
Size of logical volume vg0/lv1 changed from 512.00 MiB (32 extents) to 832.00 MiB (52 extents).
Logical volume vg0/lv1 successfully resized.
[root@newrain ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv0 vg0 -wi-ao---- <2.16g
lv1 vg0 -wi-ao---- 832.00m
FS扩容
[root@newrain ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg0-lv0 xfs 157M 8.3M 149M 6% /mnt/lv0
/dev/mapper/vg0-lv1 ext4 488M 35M 419M 8% /mnt/lv1
#xfs 文件系统扩容
[root@newrain ~]# xfs_growfs /dev/vg0/lv0
#ext2/3/4 文件系统扩容
[root@newrain ~]# resize2fs /dev/vg0/lv1
[root@newrain ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg0-lv0 xfs 2.2G 11M 2.2G 1% /mnt/lv0
/dev/mapper/vg0-lv1 ext4 802M 35M 719M 5% /mnt/lv1
作用: ‘提升‘ 内存的容量,防止OOM(Out Of Memory)
一、查看当前的交换分区
[root@newrain ~]# free -m
total used free shared buff/cache available
Mem: 972 94 662 7 216 707
Swap: 0 0 0
[root@newrain ~]# swapon -s #检测交换分区使用情况
二、增加交换分区 可以是基本分区,LVM,File
准备分区
[root@newrain ~]# fdisk /dev/sdb
[root@newrain ~]# partprobe /dev/sdb
[root@newrain ~]# ll /dev/sdd*
brw-rw---- 1 root disk 8, 48 Aug 5 22:54 /dev/sdd
brw-rw---- 1 root disk 8, 49 Aug 5 22:54 /dev/sdd1
初始化
[root@newrain ~]# mkswap /dev/sdd1
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=1def6dd0-78dd-41c2-bce1-1ec239a4ab20
[root@newrain ~]# blkid /dev/sdd1
/dev/sdd1: UUID="1def6dd0-78dd-41c2-bce1-1ec239a4ab20" TYPE="swap"
[root@newrain ~]# vim /etc/fstab
UUID="1def6dd0-78dd-41c2-bce1-1ec239a4ab20" swap swap defaults 0 0
[root@newrain ~]# swapon -a (读取/etc/fstab)
[root@newrain ~]# swapon -s
Filename Type Size Used Priority
/dev/sdd1 partition 1048572 0 -3
[root@newrain ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg0-lv0 xfs 2.2G 11M 2.2G 1% /mnt/lv0
/dev/mapper/vg0-lv1 ext4 802M 35M 719M 5% /mnt/lv1
[root@newrain ~]# cd /mnt/lv0
[root@newrain lv0]#
[root@newrain lv0]# dd if=/dev/zero of=./swap2.img bs=1M count=512
或者
[root@newrain lv0]# dd ./swap2.img bs=1M count=512
[root@newrain lv0]# mkswap ./swap2.img
Setting up swapspace version 1, size = 524284 KiB
no label, UUID=120975d5-f20a-46be-be88-8d1f030d52f1
[root@newrain lv0]# vim /etc/fstab
/mnt/lv0/swap2.img swap swap defaults 0 0
[root@newrain lv0]# swapon -a
swapon: /mnt/lv0/swap2.img: insecure permissions 0644, 0600 suggested.
[root@newrain lv0]# chmod 600 ./swap2.img
[root@newrain lv0]# swapon -a
[root@newrain lv0]# swapon -s
Filename Type Size Used Priority
/dev/sdd1 partition 1048572 0 -3
/mnt/lv0/swap2.img file 524284 0 -4
EXT2/3/4文件系统** 索引式文件系统
Ext3/Ext4文件系统基本结构
• superblock:记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式等;
• inode:记录文件的属性(文件的元数据metadata),一个文件占用一个inode,同时记录此文件数据所在的block number;
• block:实际存储文件的內容,若文件太大时,会占用多个block。
Superblock 沒有Superblock ,就沒有filesystem
• block 与 inode 的总量;
• 未使用与已使用的 inode / block 数量;
• block 与 inode 的大小 (block 为 1, 2, 4K,inode 为 128bytes 或 256bytes);
• filesystem 的挂载时间、最近一次写入数据的时间、最近一次检查 (fsck) 的时间等文件系统相关信息;
• 每个block group 都可能含有 superblock,这样可以进行用于 superblock 的修复;
data block: 存储文件的实际数据
查看文件系统的信息
dumpe2fs
[root@newrain ~]# dumpe2fs /dev/vg0/lv1
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:
Last mounted on: /mnt/lv1
Filesystem UUID: 3ea460d1-73e1-4155-a42d-a13eee5ca674
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 57344
Block count: 212992
Reserved block count: 9829
Free blocks: 205032
Free inodes: 57333
First block: 0
Block size: 4096
Fragment size: 4096
Group descriptor size: 64
Reserved GDT blocks: 63
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: Mon Aug 5 21:37:17 2019
Last mount time: Mon Aug 5 21:38:39 2019
Last write time: Mon Aug 5 23:29:52 2019
Mount count: 1
Maximum mount count: -1
Last checked: Mon Aug 5 21:37:17 2019
Check interval: 0 ()
Lifetime writes: 16 MB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: 34c7c2ed-c0b3-4678-88d8-bd7fae48f2d2
Journal backup: inode blocks
Journal features: journal_64bit
Journal size: 16M
Journal length: 4096
Journal sequence: 0x00000008
Journal start: 0
[root@newrain ~]# tune2fs -l /dev/vg0/lv1
tune2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:
Last mounted on: /mnt/lv1
Filesystem UUID: 3ea460d1-73e1-4155-a42d-a13eee5ca674
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 57344
Block count: 212992
Reserved block count: 9829
Free blocks: 205032
Free inodes: 57333
First block: 0
Block size: 4096
Fragment size: 4096
Group descriptor size: 64
Reserved GDT blocks: 63
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: Mon Aug 5 21:37:17 2019
Last mount time: Mon Aug 5 21:38:39 2019
Last write time: Mon Aug 5 23:29:52 2019
Mount count: 1
Maximum mount count: -1
Last checked: Mon Aug 5 21:37:17 2019
Check interval: 0 ()
Lifetime writes: 16 MB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: 34c7c2ed-c0b3-4678-88d8-bd7fae48f2d2
Journal backup: inode blocks
修复文件系统 fsck,e2fsck -fy
案例1: 系统无法正常启动
案例二:Read-only file system
如果运行中的服务器的某一个分区出现readonly,导致进程无法写这个分区(比如nginx进程无法写日志文件到此分区, 手动测试touch文件到此分区也显示:cannot touch ‘xxxxx’:Read-only file system),该怎么办?
解决:磁盘read-only的原因一般有2种,一种是没有正常关机导致,还有一种是硬盘故障导致。 如果是/分区,这种情况只能下线报修磁盘了。 如果是其它分区,则可以尝试三步解决此问题:
1.先卸载此分区
2.再fsck.ext4 -fy /dev/sdb1
3.最后挂载此分区,检查是否可以正常读写。
注:以上操作过程,请保证服务器不在线上提供服务
案例三:修复superblock
找到备份的superblock
[root@newrain ~]# dumpe2fs -h /dev/datavg/lv1 |grep 'Blocks per group'
dumpe2fs 1.42.9 (28-Dec-2013)
Blocks per group: 8192
利用备份的 superblock恢复superblock
[root@newrain ~]# fsck.ext4 -b 8192 /dev/datavg/lv1
• 数据区 (data section) 数据区就跟之前了解到的 ext 家族一样,包括 inode/data block/superblock 等信息,都放在该区块。
• 文件系统日志区 (log section)
• 实时运行区 (realtime section)
修复 XFS 文件系统 xfs_repair
FTA 文件系统没有 inode,所以FAT没有将文件所有的block在一开始就读取出来。每个block number记录在前一个block中, 如果一个文件写入的block过于分散,则读取速度非常慢。可以通过碎片整理的方式将分散的block尽量整理到一起。
创建文件系统vfat
[root@newrain ~]# mkfs.vfat /dev/vda6
常用挂载选项详解
挂载设备文件、卷标、UUID
ISO文件创建及挂载
挂载选项 -t 文件系统类型 -o 选项1,选项2...
示例: mount -t ext4 -o acl /dev/sdb1 /mnt/disk1
文件系统类型:vfat,ext4,xfs,nfs,cifs,iso9660,loop
例1:exec/noexec
[root@newrain ~]# mount /dev/vg01/lv01 /mnt/lv01
[root@newrain ~]# mount -o noexec /dev/vg01/lv02 /mnt/lv02
[root@newrain ~]# cp -rf /bin/date /mnt/lv01
[root@newrain ~]# cp -rf /bin/date /mnt/lv02
[root@newrain ~]# /mnt/lv01/date
Fri Jan 10 10:40:21 CST 2019
[root@newrain ~]# /mnt/lv02/date
-bash: /mnt/lv02/date: Permission denied
[root@newrain ~]# mount
/dev/mapper/vg01-lv01 on /mnt/lv01 type ext4 (rw)
/dev/mapper/vg01-lv02 on /mnt/lv02 type ext4 (rw,noexec)
没有指定任何选项,则为默认选项 man mount defaults Use default options: rw, suid, dev, exec, auto, nouser, and async.
常见的挂载选项
rw 读写
ro 只读
suid 支持suid
dev 支持设备文件
nodev 不支持设备文件
noexec 不允许执行二进制文件
exec 允许执行二进制文件
auto mount -a 开机自动挂载
noauto mount -a 开机不自动挂载
async 异步写入
sync 同步同入
usrquota 支持用户级磁盘配额功能
grpquota 支持组级磁盘配额功能
acl 支持facl功能
remount 在线重新挂载
pri 指定优先级
==================================================
Relatime 驱动器访问优化
POSIX 标准要求操作系统维护记录每个文件最后一次被访问的文件系统元数据。这个时间戳被称为atime, 维护它需要一个重复的对存储的写入操作。这些写入操作让存储是设备及其连接保持忙碌和通电状态。因 为很少应用程序会使用 atim e 数据,所以这个存储设备活动是在浪费电力。特别是即使没有从存储中读取 该文件也会发生写入存储的事件,但是从缓冲中写入。有时,Linux 内核还支持 mount 的 noatime选项,并 不在使用此选项挂载的文件系统中写入 atime。但是只是关闭这个特性是有问题的,因为有些应用程序会依 赖 atime 数据,并在此数据不可用时失败。
红帽企业版 Linux 6 使用的内核之后此另一个可替换选项 -relatime。Relatime 维护 atime数据,但不是 每次访问该文件时都更改。启用这个选项,则只在上次更新 atime(mtime)后修改该文件时,或者最后一次 访问该文件是在相当长一段时间前(默认为一天)时才会将 atime 数据写入磁盘。 默认情况下,所有现在挂载的文件系统都启用 relatime。要在整个系统中限制这个特性,请使用 boot 参 数 default_relatime=0。如果默认在某个系统中启用 relatime,您可以通过使用选项 norelatime 挂载某个系统来限制它在某个具体文件系统中的使用。最后,要使系统更新文件的 atime 数据的默认周期 有所不同,请使用 relatime_interval= 引导参数,以秒为单位指定周期。默认值为 86400
注:RHEL6开始relatime,atime延迟修改,必须满足其中一个条件:
例2:async,sync
[root@newrain ~]# mount /dev/vg01/lv01 /mnt/lv01
[root@newrain ~]# mount -o sync /dev/vg01/lv02 /mnt/lv02
[root@newrain ~]# mount
/dev/mapper/vg01-lv01 on /mnt/lv01 type ext4 (rw)
/dev/mapper/vg01-lv02 on /mnt/lv02 type ext4 (rw,sync)
[root@newrain ~]# time cp -rf /etc /mnt/lv01
[root@newrain ~]# time cp -rf /etc /mnt/lv02
挂载时可以使用(针对基本分区)
卷标 LABEL=yang
UUID UUID="353a34b8-9233-465c-b7cf-92c8d308c05b"
UDEV 可以给设备建立一个别名
例3:使用卷标挂载
[root@localhost ~]# tune2fs -l /dev/vda1 |less
Filesystem volume name:
[root@newrain ~]# tune2fs -L yang /dev/sda3 //设置卷标LABEL
tune2fs 1.39 (29-May-2006)
[root@newrain ~]# vim /etc/fstab
LABEL=yang /mnt/disk1 ext4 defaults 0 0%
例4:使用UUID挂载
[root@newrain ~]# blkid /dev/sda5
/dev/sda5: UUID="353a34b8-9233-465c-b7cf-92c8d308c05b" SEC_TYPE="ext2" TYPE="ext3"
[root@newrain ~]# vim /etc/fstab UUID="353a34b8-9233-465c-b7cf-92c8d308c05b" /mnt/disk1 ext4 defaults 0 0
挂载ISO文件
软链接 或 符号链接 硬链接
[root@newrain ~]# echo 111 > /file1
[root@newrain ~]# ln -s /file1 /home/file11
[root@newrain ~]# ll /home/file11
lrwxrwxrwx 1 root root 6 Dec 20 17:58 /home/file11 -> /file1
[root@newrain ~]# ll -i /file1 /home/file11
4599081 -rw-r--r-- 1 root root 4 Dec 20 17:57 /file1
135 lrwxrwxrwx 1 root root 6 Dec 20 17:58 /home/file11 -> /file1
[root@newrain ~]# cat /file1
111
[root@newrain ~]# cat /home/file11
111
[root@newrain ~]# rm -rf /file1
[root@newrain ~]# ll /home/file11
lrwxrwxrwx 1 root root 6 Dec 20 17:58 /home/file11 -> /file1
[root@newrain ~]# echo 222 > /file2
[root@newrain ~]# ln /file2 /file2-h1
[root@newrain ~]# ln /file2 /home/file2-h2
ln: failed to create hard link ‘/home/file2-h2’ => ‘/file2’: Invalid cross-device link
[root@newrain ~]# ln /file2 /etc/file2-h3
[root@newrain ~]# ll -i /file2 /file2-h1 /etc/file2-h3
4599081 -rw-r--r-- 3 root root 4 Dec 20 18:03 /etc/file2-h3
4599081 -rw-r--r-- 3 root root 4 Dec 20 18:03 /file2
4599081 -rw-r--r-- 3 root root 4 Dec 20 18:03 /file2-h1
把一些重要文件做多个链接
注:硬链接 1. 不能跨文件系统(分区) 2. 不支持目录做硬链接
警告:删除目录软链时;
mkdir /home/it1000
touch /home/it1000/file{1..10}
ln -s /home/it1000/ /var/
rm -rf /var/it1000/ 删除目录下的文件
rm -rf /var/it1000 仅删除链接文件本身