本文共 31879 字,大约阅读时间需要 106 分钟。
我们从一个新硬盘安装到Linux系统,期间的配置,一直到正常使用的角度,来学习磁盘存储和文件系统,过程如下:
选择分区类型(MBR或GPT)-->创建分区-->同步分区-->创建文件系统-->文件系统检测和修复-->挂载-->虚拟内存的使用-->RAID的使用-->LVM的管理
分区的类型有两种:MBR和GPT
MBR分区结构
GPT分区结构
- 我们首先选择分区的类型是MBR和GPT,根据命令fdisk(新建、管理MBR分区)、gdisk(新建、管理GPT分区)、parted(新建、管理MBR和GPT分区)创建分区。
- parted在硬盘上新建分区,实时(马上)生效;fdisk和gdisk在内存中新建分区,不会实时生效,确定保存后才会生效,常用这两个命令。
两个命令的选项参数一样,就是命令的书写不一样
fdisk 设备名<-->gdisk 设备名
parted的操作都是实时生效的,小心使用
用法:parted [选项]... [设备 [命令 [参数]...]...]
1)指定设备/dev/sdb分区类型是gpt或msdos(MBR)
parted /dev/sdb mklabel gpt|msdos-->"mklabel" 2)显示分区表 parted /dev/sdb print-->"print" 3)新建(mkpart)主分区(primary),分区编号1,大小200M parted /dev/sdb mkpart primary 1 200 (默认M) 4)删除分区编号是1的分区 parted /dev/sdb rm 1 5)列出分区信息 parted –l真正有效的分区在内存上,但是分区表存放在磁盘上,所以需要两者同步一致
查看内存中的分区表:
lsblk ll /dev/sd* cat /proc/partitions
partprobe
创建分区后同步命令:partx -a 设备名 删除分区后同名命令:partx -d --nr N-M(删除的分区编号) 设备名
新建分区后我们需要格式化,就是创建文件系统。
ls /lib/modules/`uname –r`/kernel/fs
用户输入的命令,在文件系统上执行,并不是直接作用在文件系统,而是执行在Linux的虚拟文件系统VFS(图中:Virutal file system),VFS通过真正的文件系统执行命令,这里只是简单介绍。
CentOS6常用ext4文件系统;CentOS7常用xfs文件系统。
创建文件系统有两种方法:
方法一(常用):
mkfs.文件系统类型 设备名
方法二(很少用):
mkfs -t 文件系统类型 设备名
mkfs -L 卷标名 设备名-->卷标名最好和挂载点的名称一样
检测文件系统是否创建成功
后面有命令会说到,但这里记录一个,使用二进制命令查看文件系统是否创建成功。hexdump -C 设备名
-->查看分区是否有数据(全是0表示没数据,里面都是二进制数。) 因为ext系列的文件系统是老牌的文件系统,所以它有很丰富的命令支持各种功能,所以它有自己的命令工具,就是mke2fs。
mke2fs:ext系列文件系统专用管理工具
我们新装的系统,每个分区都能给文件或目录设置ACL,但是在已有的系统中,CentOS6新建的分区默认没有ACL功能,CentOS7默认有。那么给CentOS6新建的分区添加ACL功能如下:
1.在CentOS6新建分区,创建文件系统后,查看文件系统的属性: tune2fs -l 设备名 会看到:“Default mount options: 为空” 2.空表示该分区的文件系统没有开启acl功能,开启命令如下: tune2fs -o acl 设备名 3.接着卸载该分区挂载点,在重新挂载,然后使用查看命令查看,就会看到:“Default mount options: acl” 4.有时候会删除一个分区的acl功能,删除命令如下: tune2fs -o ^acl 设备名
新建ext4文件系统后,把分区进行挂载,进入到挂载目录会看到名为“lost+found”的文件夹,这个文件夹里存放分区之前的文件,或是被覆盖的文件。因为Centos7是xfs文件系统,所以没有此文件夹。
tune2fs -l 设备名
查看文件系统,其中“Filesystem state: clean”反应了分区是否干净,即文件系统是否有故障或错误。“clean”表示干净。
不能再挂载状态下修复
(1).修复命令:
fsck -y 设备名 或fsck.补全 设备名 或fsck -t(文件系统) -p(自动修复) -r(交互修复) 设备名(2).ext系列的文件系统有自己的修复工具:
ezfsck -y(自动回答yes) -f(强制修复)练习题
查找设备列表/etc/fstab中分区名对应的设备名 思路:blkid -U "UUID" 命令:blkid -Used -rn '/\/data/s#^.*=(.*) /data.*$#\/#p' /etc/fstab
(1)挂载:mount 设备名或UUID 挂载点
(2)取消挂载:umount 挂载点
(3)强制取消挂载:有时候我们要取消挂载,但因为用户正在挂载目录,所以要用到强制取消挂载。
方法一:杀进程。查看进程(lsof 挂载点),杀掉。 方法二: 查看挂载点:fuser -v 挂载点 强杀挂载点:fuser -km 挂载点(4)挂载选项
想要永久挂载,就要修改/etc/fstab文件。
/etc/fstab每行定义一个要挂载的文件系统
1)要挂载的设备或伪文件系统
2)挂载点
挂载点最好是空目录3)文件系统类型
ext4,xfs,iso9660,nfs,none4)挂载选项
常用的挂载选项: defaults , acl , bind其它挂载选项:(这些选项也能用作临时挂载,就是添加“-o 选项”)
(5)转储频率
0:不做备份 1:每天转储 2:每隔一天转储(6)fsck检查的文件系统的顺序:允许的数字是0 1 2
0:不自检 1:首先自检;一般只有rootfs才用 2:非rootfs使用有时候挂载分区"mount -a(挂载新分区)"没用,试试"mount -o remount 挂载点(从新挂载)"
创建好挂载点后,打开/etc/fstab文件进行挂载,格式如下: UUID 挂载点 文件系统类型 defaults 0 0 之后退出文件,使用“mount -a”挂载,之后查看挂载(df)
创建好挂载点后,打开/etc/fstab文件进行挂载,格式如下: UUID 挂载点 文件系统类型 acl 0 0 之后退出文件,使用“mount -a”或“mount -o remount 挂载点”挂载,之后查看挂载(df)
创建好挂载点后,打开/etc/fstab文件进行挂载,格式如下: 目录 挂载点 none(表示没有文件系统类型) bind 0 0 (临时挂载命令是:mount 目录 挂载点 -B --bind)之后退出文件,使用“mount -a”挂载, 之后查看挂载(df或mount),注意显示的是分区,但确实挂载成功,可以查看挂载点和目录的内容,如果一致表示目录挂载目录成功。
查看文件类型:file 文件绝对路径
把光盘文件挂载到目录,首先创建挂载点(即目录),在/etc/fstab文件里写入一行: 文件绝对路径 挂载点 iso9660 loop 0 0(CentOS6临时挂载:mount -o loop /data/centos6.iso 挂载点)
(CentOS7临时挂载:mount /data/centos7.iso 挂载点) 查看:"losetup"和“df”方法一:findmnt 挂载点(例如:findmnt /mnt/sda1)
有时候挂载设备太多不容易看到,可以用方法二。方法二: findmnt 挂载点的上一目录(例如:findmnt /mnt) echo $? “0”表示成功,“非0”表示失败虚拟化技术基础:loop设备文件和稀疏文件
示例:我们把CentOS7的一个文件当U盘用。首先在这个文件里创建很多文件,然后把这个文件放到CentOS6系统里,挂载这个文件,然后查看挂载目录,是否有那些文件。
(1).创建文件data.img dd if=/dev/zero of=/data/data.img bs=1M count=100 (2).给文件创建文件系统 mkfs.ext4 /data/data.img (3).查看文件的文件系统 blkid /data/data.img (4).创建挂载点 mkdir /mnt/disk (5).挂载 1)CentOS7挂载:mount /data/data.img /mnt/disk 2)CentOS6挂载:mount -o loop /data/data.img /mnt/disk 注释:当一个文件f1挂载到另一个文件f2,系统会分配一个loop设备名关联此文件(f1),然后利用loop名进行挂载。 (6).复制文件data.img到CentOS6系统 (7).创建挂载点:mkdir /mnt/disk6 (8).在CentOS6挂载 挂载:mount -o loop /data/data.img /mnt/disk6 查看:ls /mnt/disk6 卸载挂载点:umount /mnt/disk6 (9)删除设备关联(CentOS6,7都删): losetup -d /dev/loopx(“loopx”中x是什么需要查看命令"losetup -a"去获取)稀疏文件的特点是,查看文件大小和查看文件占空间的大小不一样,像VM虚拟机一样,实际创建的系统大小是1G,但你可以当8G的用。稀疏文件用作虚拟化技术。
查看稀疏文件实际大小:ll -h 文件名
查看稀疏文件占空间的大小:df -sh 文件名或df 文件所在目录dd if=dev/zero of=bigfile bs=1M count=1024 seek=2048
CentOS6:
第一步:模拟错误的挂载文件
UUID(故意写错一位) 挂载点 ext4 defaults 0 3 第二步:重启系统会看到系统错误,进不了系统,让输入root用户的密码 第三步:输入密码后,查看/etc/fstab挂载文件发现UUID写错一位,这时修改发现无法保存,用“mount”查看分区有“rw”权限,但文件就是无法保存,其实当前是只读模式 第四步:修改根目录“/”只读模式为读写模式"mount -o remount,rw /" 第五步:修改/etc/fstab挂载配置文件,保存成功(修改错误有两种方式可以让系统重新启动,第一种就是把UUID写对;第二种是把“3”改为“0”,这项是检查系统错误的,如果改为“0”表示不检查) 第六步:重启,系统成功启动(如果是改数字的方式,也会成功启动,但在字符界面会看到红色的错误,记得最后把UUID改回)CentOS7:
第一步:模拟错误的挂载文件 UUID(故意写错一位) 挂载点 ext4 defaults 0 0 第二步:重启系统会看到系统错误,进不了系统,让你等1分钟左右检查错误 第三步:检查完后让输入管理员密码,就能进入字符系统,直接进入/etc/fstab文件修改错误,保存后重启,会看到系统成功启动。 第四步:注意这里和Centos6有区别,Centos7直接就有修改文件的权限。SWAP分区的作用:暂时缓解内存不够用
当我们执行程序时,如果内存资源耗尽,在执行程序时会提示内存不足,这时可以借助SWAP空间当做暂时的内存空间使用,所以:“系统内存最大容量=内存容量+SWAP容量”。其实SWAP容量是磁盘的容量,我们在装系统,划分分区时会创建SWAP分区,分区容量最好是当前内存(当前内存不超过4G)的1.5-2倍,最大(当前内存超过4G)不超过8G或16G,SWAP分区的读写速度并没有内存那么快,查看SWAP分区和内存的容量使用“free -h”命令。
(1)把SWAP分区放到高速硬盘上,例如固态硬盘(强烈推荐)
(2)因为机械硬盘同一时间指针的角速度不变,而机械硬盘同一磁道外侧扇区比内侧扇区存放数据多,划分分区是从外侧开始划分,所以把SWAP分区在新硬盘上划分为第一个分区,读写性能在这个硬盘上是最快的。附两张机械硬盘图,如下:SWAP分区可以有多个,创建SWAP分区如下:分两种格式
分区之间的修改其实是ID的修改,ID在fdisk(或gdisk)--->m--->t-->L 可看到
示例1:把GPT分区的sdc1分区修改为SWAP分区
1)卸载挂载点: umount 挂载点 2)使用GPT分区工具: gdisk /dev/sdc 3)查看分区: p4)查看指定ID的子命令: m 5)指定分区的ID: t 6)选择分区编号: 1 7)显示ID类型: L 8)输入ID: 8200 9)查看分区: p 10)保存退出: w 11)创建SWAP分区的文件系统: mkswap /dev/sdc1 12)查看: blkid 13)在/etc/fstab挂载: UUID swap swap defaults 0 0 14)使挂载生效: swapon -a 15)查看swap容量: free -h 16)详细查看swap分区: cat /proc/swaps或者swapon -s 注意,Prionity是优先级的意思,数字越大,优先级越高。从性能的角度,应该先使用读写速度快的swap分区,所以要把那个分区的优先级调高。 17)调整swap分区的优先级:修改/etc/fstab UUID swap swap pri=6(范围是0-32767,数越大优先级越高) 0 0 18)禁用修改的swap分区:swapoff /dev/sdc1 19)查看是否禁用swap分区:cat /proc/swaps或者swapon -s 20)启用修改的swap分区:swapon -a 21)查看swap分区优先级是否生效:cat /proc/swaps或者swapon -s 22)删除swap分区: 先禁用swapoff /dev/sdc1然后把/etc/fstab文件里/dev/sdc1对应的那行删掉,最后删除分区。
示例2:把MBR分区的sdd1分区修改为SWAP分区
1)卸载挂载点: umount 挂载点 2)使用GPT分区工具: fdisk /dev/sdd 3)查看分区: p4)查看指定ID的子命令: m 5)指定分区的ID: t 6)选择分区编号: 1 7)显示ID类型: L 8)输入ID: 82 9)查看分区: p 10)保存退出: w 11)创建SWAP分区的文件系统: mkswap /dev/sdd1 12)查看: blkid 13)在/etc/fstab挂载: UUID swap swap defaults 0 014)使挂载生效: swapon -a 15)查看swap容量: free -h 16)详细查看swap分区: cat /proc/swaps 注意,Prionity是优先级的意思,数字越大,优先级越高。从性能的角度,应该先使用读写速度快的swap分区,所以要把那个分区的优先级调高。 17)调整swap分区的优先级:修改/etc/fstab UUID swap swap pri=6(范围是0-32767,数越大优先级越高) 0 0 18)禁用修改的swap分区:swapoff /dev/sdd1 19)查看是否禁用swap分区:cat /proc/swaps 20)启用修改的swap分区:swapon -a 21)查看swap分区优先级是否生效:cat /proc/swaps 22)删除swap分区: 先禁用swapoff /dev/sdd1然后把/etc/fstab文件里/dev/sdd1对应的那行删掉,最后删除分区。
示例3:使用文件当做SWAP分区
有时候电脑不能创建新分区,并且现有的分区不能更改为swap分区,但我们又需要swap为内存做缓存,这时可以用一个文件当做swap分区,Windows系统类似swap功能的就是一个文件。步骤如下:
1)创建fileswap文件大小2Gdd if=/dev/zero of=/fileswap(文件名) bs=1M count=2048 2)格式化为swap文件系统 mkswap /fileswap 3)挂载 UUID swap swap defaults 0 0 4)使挂载生效 swapon -a 生效的同时会提醒权限警告,如果都有看的权限,普通用户通过二进制查看方式(hexdump -C /fileswap)可以看到文件里的内容,所以下一步要修改文件的权限 5)修改文件权限 chmod 600 /fileswap 6)查看swap: cat /proc/swaps或者swapon -s
注意:U盘格式必须是NTFS32文件系统格式。如果是NTFS文件系统,Linux不支持。
挂载在/run/media/<user>/<label>
推荐系统 swap 空间
df [OPTION]... [FILE]...
du [OPTION]... DIR
dd作用:转换和复制文件
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST bs=# count=#
conv=conversion[,conversion...] 用指定的参数转换文件
示例1:把/etc/fstab文件里的小写字母转换为大写,生成为文件/data/daxie
dd if=/etc/fstab of=/data/daxie conv=ucase
示例2:用dd创建的的文件写到磁盘上,而不是内存里
dd创建一个很大的文件一下就创建完了,其实她在创建在内存里,而不是磁盘上,所以断电后这个文件如果后台没有真正创建完,就会损坏。那么如何让dd命令创建的文件直接保存在磁盘上呢,而不是默认的内存里呢?其实加“fdatasync”就行。如下:
dd if=/dev/zero of=/data/f1 bs=1M count=100 conv=fdatasync
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
有一个大与2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读取的大小是128Byts。又有fileB, 想把上面读取到的128Bytes写到第32个字节开始的位置,替换128Bytes,实现如下:
dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc
将本地的/dev/sdx整盘备份到/dev/sdy
dd if=/dev/sdx of=/dev/sdy
将/dev/sdx全盘数据备份到指定路径的image文件 dd if=/dev/sdx of=/path/to/image
备份/dev/sdx全盘数据,并利用gzip压缩,保存到指定路径 dd if=/dev/sdx | gzip >/path/to/image.gz
将备份文件恢复到指定盘
dd if=/path/to/image of=/dev/sdx
将压缩的备份文件恢复到指定盘
gzip -dc /path/to/image.gz | dd of=/dev/sdx
1)拷贝内存资料到硬盘
将内存里的数据拷贝到root目录下的mem.bin文件dd if=/dev/mem of=/root/mem.bin bs=1024
2)从光盘拷贝iso镜像
拷贝光盘数据到root文件夹下,并保存为cd.iso文件dd if=/dev/cdrom of=/root/cd.iso
3)销毁磁盘数据
利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据,执行此操作以后,/dev/sda1将无法挂载,创建和拷贝操作无法执行dd if=/dev/urandom of=/dev/sda1
4)得到最恰当的block size(块设备大小)
通过比较dd指令输出中命令的执行时间,即可确定系统最佳的block size(块设备)大小dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
dd if=/dev/zero of=/root/1Gb.file bs=2048 count=500000
dd if=/dev/zero of=/root/1Gb.file bs=4096 count=250000
测试硬盘写速度:
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
测试硬盘读速度:
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
说明:用dd创建的的文件写到磁盘上,而不是内存里 dd创建一个很大的文件一下就创建完了,其实她在创建在内存里,而不是磁盘上,所以断电后这个文件如果后台没有真正创建完,就会损坏。那么如何让dd命令创建的文件直接保存在磁盘上呢,而不是默认的内存里呢?其实加“fdatasync”就行。如下: dd if=/dev/zero of=/data/f1 bs=1M count=100 conv=fdatasync
RAID-0:条带卷,strip
RAID-1:镜像卷,mirror RAID-2 省略 RAID-5 RAID-6 RAID-10 RAID-01
常用的RAID有RAID-1、RAID-5、RAID-10
企业常用硬件RAID,软RAID用于测试环境将一个分区或硬盘变成逻辑卷,过程是:
第一步:将分区和硬盘变成物理卷 第二步:将物理卷变成卷组 第三步:卷组从卷组划分出若干逻辑卷 第四步:将逻辑卷创建文件系统(格式化) 第五步:创建挂载点,挂载(即修改/etc/fstab文件)
pvcreate /dev/DEVICE
pvremove /dev/DEVICE
使用帮助:pvcreate --help
vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
使用帮助:vgcreate --help
使用帮助:lvcreate --help
示例:使用分区/dev/sdc1和硬盘/dev/sdd创建一个逻辑卷,名为mysql
1)分区要变成逻辑卷,首先卸载挂载,其次把分区ID变为逻辑卷的ID;硬盘不用。 2)把分区和硬盘加入物理卷,可一次指定多个分区加入物理卷 pvcreate 设备名(分区名) pvcreate /dev/sdc1 /dev/sdd pvs(查看物理卷) 3)创建卷组 vgcrte 卷组名 要加入的物理卷 vgcreate vg0 /dev/sdc1 /dev/sdd vgs(查看卷组) 4)创建逻辑卷 lvcreate -n 逻辑卷名 -L 逻辑卷大小 卷组 lvcreate -n mysql -L 4G vg0 lvs(查看逻辑卷) 注意你看到的逻辑卷名/dev/vg0/mysql其实是一个软连接,可通过“ll /dev/vg0/mysql”查看到真名是“dm-数字”,但其实这个真名还有一个软连接“/dev/mapper/vg0-mysql”。所以当你格式化分区后在"/etc/fstab"查看设备会有两种情况,要不逻辑卷叫“/dev/vg0/mysql”,或者叫“/dev/mapper/vg0-mysql”。 5)给逻辑卷创建文件系统 mkfs.xfs /dev/vg0/mysql 6) 创建挂载点,在/etc/fstab文件里进行挂载 UUID 挂载点 xfs defaults 0 0 (分享一个复制UUID的办法,在"vim /etc/fstab"后,输入“:r!blkid空格/dev/vg0/mysql(逻辑卷的绝对路径)”后回车就看到UUID出现在此文件里了) 7) 重新加载分区:mount -a 8) 查看逻辑卷是否挂载成功:df
扩展:先扩展,在格式化(创建文件系统)逻辑卷
缩减:先格式化,在缩减逻辑卷
先扩展逻辑卷,在格式化(创建文件系统)逻辑卷
在线扩展:用户在使用该逻辑卷的时候,可以扩展逻辑卷,不用卸载挂载在扩展,扩展的过程对用户使用没有影响,也不会损坏文件
示例:在线扩展逻辑卷mysql,增加3个G
1)扩展:lvextend -L +3G /dev/vg0/mysql
4)查看逻辑卷是否扩展成功
df -hT5)一条命令实现扩展逻辑卷并格式化文件系统(-r表示格式化,支持各种文件系统)
lvextend -r -L +100M /dev/vg0/mysql
先格式化,在缩减逻辑卷(前提:逻辑卷处于离线状态,即卸载挂载点)
缩减前一定要备份
缩减会导致空间变小,所以会丢失数据xfs文件系统支持扩展,不支持缩减;
ext系列文件系统支持扩展和缩减文件系统,但只能离线缩减,不支持在线缩减。
示例:卸载逻辑卷/dev/vg0/binlog(文件系统是ext4)
1)查看:df -hT 2)卸载挂载点:umount /mnt/binlog 3)检查文件系统错误e2fsck -f /dev/vg0/binlog
注释:如果你不执行检查文件系统错误的命令,直接格式化逻辑卷,会提示你先检查错误,并标明命令。4)格式化逻辑卷 resize2fs /dev/vg0/binlog 1G
注释:resize2fs默认是扩展的意思,加了大小就是缩减的意思了。 5)缩减逻辑卷为1G大小 lvreduce -L 1G /dev/vg0/binlog
6)重新挂载 mount -a
7)查看:df -hT
因为逻辑卷是由卷组分配出来的逻辑空间,而卷组的空间是无数个PE组成的(查看PE的大小及数量用“vgdisplay”或“pvdisplay”)。PE的空间又是普通的分区或硬盘给予的,所以在移动(迁移)逻辑卷的时候,把逻辑卷占用的所有的PE迁移到新电脑上就成功迁移了。
相当于对之前的命令做一个总结
示例:把家目录/home迁移到逻辑卷 1.查看分区,找出能创建逻辑卷的空间[root@centos7 ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda 8:0 0 200G 0 disk ├─sda1 8:1 0 1G 0 part /boot├─sda2 8:2 0 100G 0 part /├─sda3 8:3 0 50G 0 part /data├─sda4 8:4 0 1K 0 part └─sda5 8:5 0 3G 0 part [SWAP]sdb 8:16 0 20G 0 disk ├─sdb1 8:17 0 1G 0 part /mnt/sdb1└─sdb2 8:18 0 2G 0 part └─vg0-binlog 253:1 0 1G 0 lvm /mnt/binlogsdc 8:32 0 10G 0 disk └─sdc1 8:33 0 3G 0 part └─vg0-mysql 253:0 0 23G 0 lvm /mnt/mysqlsdd 8:48 0 20G 0 disk └─vg0-mysql 253:0 0 23G 0 lvm /mnt/mysqlsr0 11:0 1 10G 0 rom [root@centos7 ~]#从上面看到sdb和sdc还有空间,所以决定创建sdb3和sdc2,供逻辑卷使用 2.fdisk -l查看sdb和sdc的分区类型,使用对应的分区工具划分sdb3和sdc23.同步分区,查看是否创建出新分区CentOS7上同步:partprobe查看:lsblk[root@centos7 ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda 8:0 0 200G 0 disk ├─sda1 8:1 0 1G 0 part /boot├─sda2 8:2 0 100G 0 part /├─sda3 8:3 0 50G 0 part /data├─sda4 8:4 0 1K 0 part └─sda5 8:5 0 3G 0 part [SWAP]sdb 8:16 0 20G 0 disk ├─sdb1 8:17 0 1G 0 part /mnt/sdb1├─sdb2 8:18 0 2G 0 part │ └─vg0-binlog 253:1 0 1G 0 lvm /mnt/binlog└─sdb3 8:19 0 17G 0 part sdc 8:32 0 10G 0 disk ├─sdc1 8:33 0 3G 0 part │ └─vg0-mysql 253:0 0 23G 0 lvm /mnt/mysql└─sdc2 8:34 0 7G 0 part sdd 8:48 0 20G 0 disk └─vg0-mysql 253:0 0 23G 0 lvm /mnt/mysqlsr0 11:0 1 10G 0 rom4.把/dev/sdb3和/dev/sdc2加入物理卷 [root@centos7 ~]# pvcreate /dev/sdb3 /dev/sdc2 Physical volume "/dev/sdb3" successfully created. Physical volume "/dev/sdc2" successfully created.5.查看物理卷[root@centos7 ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb2 vg0 lvm2 a-- <2.00g 1020.00m /dev/sdb3 lvm2 --- <17.00g <17.00g /dev/sdc1 vg0 lvm2 a-- <3.00g 0 /dev/sdc2 lvm2 --- <7.00g <7.00g /dev/sdd vg0 lvm2 a-- <20.00g 0 6.创建卷组vg1,并指定每个PE大小是16M,把sdb3加入卷组[root@centos7 ~]# vgcreate -s 16M vg1 /dev/sdb3 Volume group "vg1" successfully created7.把sdc2加入卷组vg1[root@centos7 ~]# vgextend vg1 /dev/sdc2 Volume group "vg1" successfully extended8.查看物理卷(vgs或者pvdisplay)[root@centos7 ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb2 vg0 lvm2 a-- <2.00g 1020.00m /dev/sdb3 vg1 lvm2 a-- 16.98g 16.98g /dev/sdc1 vg0 lvm2 a-- <3.00g 0 /dev/sdc2 vg1 lvm2 a-- 6.98g 6.98g /dev/sdd vg0 lvm2 a-- <20.00g 0 [root@centos7 ~]# 9.查看卷组(vgs或者vgdisplay)[root@centos7 ~]# vgs VG #PV #LV #SN Attr VSize VFree vg0 3 2 0 wz--n- <24.99g 1020.00m vg1 2 0 0 wz--n- <23.97g <23.97g[root@centos7 ~]#[root@centos7 ~]# vgdisplay --- Volume group --- VG Name vg1 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 2 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 <23.97 GiB PE Size 16.00 MiB Total PE 1534 Alloc PE / Size 0 / 0 Free PE / Size 1534 / <23.97 GiB VG UUID rQ4H68-jtLb-1WPf-GhOU-xdax-TO7p-eiF6AZ[root@centos7 ~]#10.创建逻辑卷home,分配卷组vg1的所有空间给逻辑卷home[root@centos7 ~]# lvcreate -n home -l 100%free vg1 Logical volume "home" created.11.查看逻辑卷(注意查看逻辑卷的空间单位不再是PE,而是LE)[root@centos7 ~]# lvdisplay /dev/vg1/home --- Logical volume --- LV Path /dev/vg1/home LV Name home VG Name vg1 LV UUID ufnLxD-1UqE-j0Uy-1QVH-pyAh-ZJt8-qvdRdi LV Write Access read/write LV Creation host, time centos7.localdomain, 2019-03-30 17:17:03 +0800 LV Status available # open 0 LV Size <23.97 GiB Current LE 1534 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:2[root@centos7 ~]#12.给逻辑卷/dev/vg1/home创建文件系统[root@centos7 ~]# mkfs.xfs /dev/vg1/home meta-data=/dev/vg1/home isize=512 agcount=4, agsize=1570816 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0data = bsize=4096 blocks=6283264, imaxpct=25 = sunit=0 swidth=0 blksnaming =version 2 bsize=4096 ascii-ci=0 ftype=1log =internal log bsize=4096 blocks=3068, version=2 = sectsz=512 sunit=0 blks, lazy-count=1realtime =none extsz=4096 blocks=0, rtextents=013.查看逻辑卷/dev/vg1/home设备名和UUID [root@centos7 ~]# blkid /dev/vg1/home/dev/vg1/home: UUID="7bfd7b30-f670-4b04-9f0e-6df3cb364f3b" TYPE="xfs" 14.因为挂载需要空目录去挂载,如果目录里有文件,挂载就会看不到原有的文件。想要把家目录迁移到逻辑卷,就是把逻辑卷的挂载点设置为家目录,可家目录里有很多文件该怎么办呢?需要把逻辑卷临时挂载,然后把家目录的文件复制过去,注意保留属性。之后清空家目录,在永久挂载逻辑卷,即编辑/etc/fstab。注意的是,因为一个设备(这里是逻辑卷)可以挂载多个目录,所以不用把临时挂载的挂载点卸载。挂载成功后使用普通用户登录,看是不是自己的家目录,如果是就表示成功迁移。[root@centos7 ~]#mkdir /mnt/home15.临时挂载[root@centos7 ~]# mount /dev/vg1/home /mnt/home16.查看家目录[root@centos7 ~]# ls /homeniu niubin[root@centos7 ~]# ls /mnt/home17.复制家目录内容并保留文件原来的属性和设置[root@centos7 ~]# cp -a /home/. /mnt/home18.查看复制到挂载点的文件的属性是否一致,还有家目录和挂载点的大小是否一致[root@centos7 ~]# ls /mnt/home/niu niubin[root@centos7 ~]# ll -a /hometotal 0drwxr-xr-x. 4 root root 31 Mar 17 03:45 .dr-xr-xr-x. 19 root root 251 Mar 12 11:49 ..drwx------. 5 niu niu 159 Mar 17 03:47 niudrwxr-xr-x. 2 root root 39 Mar 12 15:21 niubin[root@centos7 ~]# ll -a /mnt/home/total 0drwxr-xr-x. 4 root root 31 Mar 17 03:45 .drwxr-xr-x. 10 root root 102 Mar 30 17:27 ..drwx------. 5 niu niu 159 Mar 17 03:47 niudrwxr-xr-x. 2 root root 39 Mar 12 15:21 niubin[root@centos7 ~]# du -sh /home36K /home[root@centos7 ~]# du -sh /mnt/home36K /mnt/home[root@centos7 ~]#19.删除家目录内的文件[root@centos7 ~]# rm -rf /home/*20.永久挂载,修改配置文件/etc/fstab[root@centos7 ~]# blkid /dev/vg1/home/dev/vg1/home: UUID="7bfd7b30-f670-4b04-9f0e-6df3cb364f3b" TYPE="xfs" [root@centos7 ~]# echo "UUID=7bfd7b30-f670-4b04-9f0e-6df3cb364f3b /mnt/home xfs defaults 0 0" >> /etc/fstab [root@centos7 ~]# mount -a21.查看挂载[root@centos7 ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/sda2 100G 3.6G 97G 4% /devtmpfs 705M 0 705M 0% /devtmpfs 721M 0 721M 0% /dev/shmtmpfs 721M 11M 711M 2% /runtmpfs 721M 0 721M 0% /sys/fs/cgroup/dev/sdb1 1014M 33M 982M 4% /mnt/sdb1/dev/sda3 50G 33M 50G 1% /data/dev/sda1 1014M 164M 851M 17% /boot/dev/mapper/vg0-mysql 23G 33M 23G 1% /mnt/mysql/dev/mapper/vg0-binlog 976M 2.6M 911M 1% /mnt/binlogtmpfs 145M 12K 145M 1% /run/user/42tmpfs 145M 0 145M 0% /run/user/0/dev/mapper/vg1-home 24G 33M 24G 1% /home22.使用普通用户登录,查看刚进系统是不是自己的家目录 [root@centos7 ~]# su - niuLast login: Sun Mar 17 03:48:13 CST 2019 on pts/2[niu@centos7 ~]$ pwd/home/niu[niu@centos7 ~]$23.迁移成功
1)卸载挂载点umount 挂载点2)删除逻辑卷lvremove 逻辑卷名
1)为现有逻辑卷创建快照
lvcreate -l 64 -s -n data-snapshot -p r /dev/vg0/data
2)挂载快照
mkdir -p /mnt/snap
mount -o ro /dev/vg0/data-snapshot /mnt/snap
3)恢复快照
umount /dev/vg0/data-snapshot
umount /dev/vg0/data
lvconvert --merge /dev/vg0/data-snapshot
4)删除快照
umount /mnt/databackup
lvremove /dev/vg0/databackup
创建快照
1.查看逻辑卷/dev/vg0/mysql[root@centos7 ~]# lvdisplay /dev/vg0/mysql --- Logical volume --- LV Path /dev/vg0/mysql LV Name mysql VG Name vg0 LV UUID IGpiUg-OgXh-QFXA-ZwsV-WkvC-7ehq-nUNEVC LV Write Access read/write LV Creation host, time centos7.localdomain, 2019-03-29 05:12:23 +0800 LV Status available # open 1 LV Size 22.99 GiB Current LE 5886 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:0[root@centos7 ~]#2.给逻辑卷/dev/vg0/mysql创建快照,前提逻辑卷的卷组要有足够的空间,快照名为“mysql_kuaizhao”,并指定大小100M。(“-s”表示创建快照;还可以加“-p r”,表示创建只读的快照,这样快照被挂载后,访问挂载点,里面的内容就不怕被改。)[root@centos7 ~]# lvcreate -n mysql_kuaizhao -s -L 100M /dev/vg0/mysql Logical volume "mysql_kuaizhao" created.3.使用lvdisplay查看/dev/vg0/mysql会看到,该逻辑卷有一个快照[root@centos7 ~]# lvdisplay /dev/vg0/mysql --- Logical volume --- LV Path /dev/vg0/mysql LV Name mysql VG Name vg0 LV UUID IGpiUg-OgXh-QFXA-ZwsV-WkvC-7ehq-nUNEVC LV Write Access read/write LV Creation host, time centos7.localdomain, 2019-03-29 05:12:23 +0800 --------------------------------------------------------- - LV snapshot status source of - - mysql_kuaizhao [active] - --------------------------------------------------------- LV Status available # open 1 LV Size 22.99 GiB Current LE 5886 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:0[root@centos7 ~]#4.或者用lvs可以看到多出一个逻辑卷,并且“Attr”的第一个字符是s,表示快照[root@centos7 ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert binlog vg0 -wi-ao---- 1.00g mysql vg0 owi-aos--- 22.99g mysql_kuaizhao vg0 swi-a-s--- 100.00m mysql 0.02 home vg1 -wi-ao---- <23.97g [root@centos7 ~]#5.查看设备blkid会看到逻辑卷/dev/vg0/mysql和它的快照的UUID相同6.挂载快照因为快照UUID与原逻辑卷的UUID一样,所以正常挂载会报错,xfs文件系统挂载需要加“-o nouuid”,意思是不检查UUID进行挂载,ext系列的文件系统不用加。建议在加“ro”,让快照的挂载目录无法被修改[root@centos7 ~]# mkdir /mnt/mysql_kuaizhao [root@centos7 ~]# mount -o nouuid,ro /dev/vg0/mysql_kuaizhao /mnt/mysql_kuaizhao7.查看挂载[root@centos7 ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/sda2 100G 3.6G 97G 4% /······························/dev/mapper/vg0-mysql 23G 33M 23G 1% /mnt/mysql/dev/mapper/vg1-home 24G 33M 24G 1% /home/dev/mapper/vg0-binlog 976M 2.6M 911M 1% /mnt/binlog···············/dev/mapper/vg0-mysql_kuaizhao 23G 33M 23G 1% /mnt/mysql_kuaizhao8.查看原逻辑卷和逻辑卷快照的挂载点内容[root@centos7 ~]# ls /mnt/mysqlf1 f2[root@centos7 ~]# ls /mnt/mysql_kuaizhao/f1 f2注意:虽然在快照的挂载点看到了逻辑卷的数据,但这些数据并不在快照里,而是在原来的逻辑卷里,只是显示一下。
恢复快照
以上面的逻辑卷及其快照为例,删除逻辑卷的f1文件,在查看快照的挂载点里f1依然存在,证明了快照的作用。现在要使用快照恢复逻辑卷f1文件。1.使用快照恢复逻辑卷内容,先卸载该逻辑卷和快照的挂载点umount /mnt/mysqlumount /mnt/mysql_kuaizhao2.合并lvconvert --merge /dev/vg0/mysql_kuaizhao合并后,快照恢复数据后会自动删除3.查看逻辑卷是否有快照(lvdisplay /dev/vg0/mysql),可以看到原来的快照信息消失了。4.重新挂载,查看挂载,发现快照消失了[root@centos7 ~]# mount -a[root@centos7 ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/sda2 100G 3.6G 97G 4% /devtmpfs 705M 0 705M 0% /devtmpfs 721M 0 721M 0% /dev/shmtmpfs 721M 11M 711M 2% /runtmpfs 721M 0 721M 0% /sys/fs/cgroup/dev/sdb1 1014M 33M 982M 4% /mnt/sdb1/dev/sda3 50G 33M 50G 1% /data/dev/sda1 1014M 164M 851M 17% /boot/dev/mapper/vg1-home 24G 33M 24G 1% /home/dev/mapper/vg0-binlog 976M 2.6M 911M 1% /mnt/binlogtmpfs 145M 12K 145M 1% /run/user/42tmpfs 145M 0 145M 0% /run/user/0/dev/mapper/vg0-mysql 23G 33M 23G 1% /mnt/mysql5.查看逻辑卷的挂载目录里,f1恢复成功[root@centos7 ~]# ls /mnt/mysqlf1 f2
如果有一块磁盘闪烁黄灯,表示磁盘快坏了。但是该磁盘加入了物理卷,给逻辑卷提供了空间(即PE),把它拔出代表卷组和逻辑卷的一部分空间没了,如果有数据就会丢失。解决的办法是,把该磁盘的提供给卷组的PE复制到正常的磁盘即可。如果情况坏点,当时没有多余的空间,那么在添加一个硬盘加入物理卷,给卷组增加空间(PE)即可。在如果没有多余的插槽添加硬盘,可通过缩减逻辑卷(xfs文件系统不支持缩减,ext系列文件系统支持),在增加卷组空间。
1)添加新硬盘后,使用lsblk看不到硬盘,需要刷新,命令如下echo "---" > /sys/class/scsi_host/host2/scan
2)把新硬盘添加到物理卷,并添加到卷组 3)移动坏掉的PE(假设硬盘空间都要移动)"pvmove"命令可以指定,把卷组中的某一空间(PE)移动到同一卷组的其他空间中去。pvmove 要移动的磁盘分区
4)删除卷组中快要坏的磁盘分区 vgreduce 卷组 磁盘分区
5)删除物理卷中快要坏的磁盘分区(其实是删除PE)pvremove 磁盘分区
转载于:https://blog.51cto.com/13465487/2371994