标签:osi 看到了 sector 二进制 parted ocfs2 根目录 学习 隐藏
磁盘存储和文件系统我们从一个新硬盘安装到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 -U sed -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,none
4)挂载选项
常用的挂载选项:
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
注释:创建稀疏文件bigfile,大小是3072M,其中2048M为空内容(可留在以后添加内容)
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)查看分区: p
4)查看指定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)查看分区: p
4)查看指定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 0
14)使挂载生效: 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文件大小2G
dd 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
2)查看:df -hT
这时你会看到逻辑卷mysql并没有扩大,是因为df命令查看的是"分区的文件系统"的大小,想看扩展后逻辑卷的大小需要在重新格式化逻辑卷
3)格式化逻辑卷:(注意不同的文件系统格式化所用的命令不一样)
4)查看逻辑卷是否扩展成功
df -hT
5)一条命令实现扩展逻辑卷并格式化文件系统(-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 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 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
sdc 8:32 0 10G 0 disk
└─sdc1 8:33 0 3G 0 part
└─vg0-mysql 253:0 0 23G 0 lvm /mnt/mysql
sdd 8:48 0 20G 0 disk
└─vg0-mysql 253:0 0 23G 0 lvm /mnt/mysql
sr0 11:0 1 10G 0 rom
[root@centos7 ~]#
从上面看到sdb和sdc还有空间,所以决定创建sdb3和sdc2,供逻辑卷使用
2.fdisk -l
查看sdb和sdc的分区类型,使用对应的分区工具划分sdb3和sdc2
3.同步分区,查看是否创建出新分区
CentOS7上同步:partprobe
查看:lsblk
[root@centos7 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 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/mysql
sr0 11:0 1 10G 0 rom
4.把/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 created
7.把sdc2加入卷组vg1
[root@centos7 ~]# vgextend vg1 /dev/sdc2
Volume group "vg1" successfully extended
8.查看物理卷(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=0
data = bsize=4096 blocks=6283264, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=3068, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
13.查看逻辑卷/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/home
15.临时挂载
[root@centos7 ~]# mount /dev/vg1/home /mnt/home
16.查看家目录
[root@centos7 ~]# ls /home
niu niubin
[root@centos7 ~]# ls /mnt/home
17.复制家目录内容并保留文件原来的属性和设置
[root@centos7 ~]# cp -a /home/. /mnt/home
18.查看复制到挂载点的文件的属性是否一致,还有家目录和挂载点的大小是否一致
[root@centos7 ~]# ls /mnt/home/
niu niubin
[root@centos7 ~]# ll -a /home
total 0
drwxr-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 niu
drwxr-xr-x. 2 root root 39 Mar 12 15:21 niubin
[root@centos7 ~]# ll -a /mnt/home/
total 0
drwxr-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 niu
drwxr-xr-x. 2 root root 39 Mar 12 15:21 niubin
[root@centos7 ~]# du -sh /home
36K /home
[root@centos7 ~]# du -sh /mnt/home
36K /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 -a
21.查看挂载
[root@centos7 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 100G 3.6G 97G 4% /
devtmpfs 705M 0 705M 0% /dev
tmpfs 721M 0 721M 0% /dev/shm
tmpfs 721M 11M 711M 2% /run
tmpfs 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/binlog
tmpfs 145M 12K 145M 1% /run/user/42
tmpfs 145M 0 145M 0% /run/user/0
/dev/mapper/vg1-home 24G 33M 24G 1% /home
22.使用普通用户登录,查看刚进系统是不是自己的家目录
[root@centos7 ~]# su - niu
Last 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_kuaizhao
7.查看挂载
[root@centos7 ~]# df -h
Filesystem 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_kuaizhao
8.查看原逻辑卷和逻辑卷快照的挂载点内容
[root@centos7 ~]# ls /mnt/mysql
f1 f2
[root@centos7 ~]# ls /mnt/mysql_kuaizhao/
f1 f2
注意:虽然在快照的挂载点看到了逻辑卷的数据,但这些数据并不在快照里,而是在原来的逻辑卷里,只是显示一下。
恢复快照
以上面的逻辑卷及其快照为例,删除逻辑卷的f1文件,在查看快照的挂载点里f1依然存在,证明了快照的作用。现在要使用快照恢复逻辑卷f1文件。
1.使用快照恢复逻辑卷内容,先卸载该逻辑卷和快照的挂载点
umount /mnt/mysql
umount /mnt/mysql_kuaizhao
2.合并
lvconvert --merge /dev/vg0/mysql_kuaizhao
合并后,快照恢复数据后会自动删除
3.查看逻辑卷是否有快照(lvdisplay /dev/vg0/mysql),可以看到原来的快照信息消失了。
4.重新挂载,查看挂载,发现快照消失了
[root@centos7 ~]# mount -a
[root@centos7 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 100G 3.6G 97G 4% /
devtmpfs 705M 0 705M 0% /dev
tmpfs 721M 0 721M 0% /dev/shm
tmpfs 721M 11M 711M 2% /run
tmpfs 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/binlog
tmpfs 145M 12K 145M 1% /run/user/42
tmpfs 145M 0 145M 0% /run/user/0
/dev/mapper/vg0-mysql 23G 33M 23G 1% /mnt/mysql
5.查看逻辑卷的挂载目录里,f1恢复成功
[root@centos7 ~]# ls /mnt/mysql
f1 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 磁盘分区
标签:osi 看到了 sector 二进制 parted ocfs2 根目录 学习 隐藏
原文地址:https://blog.51cto.com/13465487/2371994