磁盘管理
基本概述:机械hdd与固态ssd
系统的第⼀块SCSI接⼝的硬盘名称为 /dev/sda
系统的第⼆块SCSI接⼝的硬盘名称为 /dev/sdb
物理硬盘 /dev/sd[a-z]
KVM虚拟化 /dev/vd[a-z] online
//第⼀块磁盘
/dev/sda
//第⼆块磁盘第⼀个分区
/dev/sdb1
//第⼀块KVM虚拟化磁盘, 第⼀个分区
/dev/vda1
fdisk -l # 查看磁盘详细信息
# /dev/sda 是硬盘设备名,⼤⼩为 59.1 GB,共有 115343360 个扇区
Disk /dev/sda: 59.1 GB, 59055800320 bytes, 115343360 sectors
# 每个扇区⼤⼩为 512 字节
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000ba7c9
#硬盘分为三个分区,分别为 /dev/sda1、/dev/sda2 和 /dev/sda3。其中 /dev/sda1 是启动分区⽂件系统为
Linux;/dev/sda2 是 Linux 交换分区;/dev/sda3 是 Linux ⽂件系统。
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 616447 307200 83 Linux
/dev/sda2 616448 6909951 3146752 82 Linux swap / Solaris
/dev/sda3 6909952 115343359 54216704 83 Linux
MBR (Master Boot Record)⽅式只能分4个主分区, GPT (GUID Partition Table)可分128个主分区
MBR 与 GPT 之间互相转换会导致数据丢失
# 检查磁盘使用情况
df -h
# 检查inode
df -i
# 查看类型
df -T
# 查看分区情况
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 55G 0 disk
├─sda1 8:1 0 300M 0 part /boot
├─sda2 8:2 0 3G 0 part [SWAP]
└─sda3 8:3 0 51.7G 0 part /
sr0 11:0 1 53.9M 0 rom
sr1 11:1 1 4.2G 0 rom
lsblk 命令输出结果中每⼀列的详细解释:
NAME :该列显示块设备的名称,通常是硬盘或硬盘上的分区。在这个例⼦中,块设备是 sda 、 sr0 和
sr1 。
MAJ:MIN :该列显示块设备的主设备号和次设备号。系统使⽤这些数字来识别块设备。
RM :该列显示块设备是否为可移动设备。如果该值为0,则表示该设备是固定设备,如果该值为1,则表示
该设备是可移动设备。
SIZE :该列显示块设备的总⼤⼩。在这个例⼦中,设备 sda 的总⼤⼩为55G。
RO :该列显示块设备是否为只读设备。如果该值为0,则表示该设备是可读写设备,如果该值为1,则表示
该设备是只读设备。
TYPE :该列显示块设备的类型。在这个例⼦中,设备 sda 和其分区的类型为 disk ,设备 sr0 和 sr1 的类
型为 rom 。
MOUNTPOINT :该列显示块设备的挂载点。如果该设备没有挂载点,则该列显示为空。在这个例⼦中,设
备 sda1 的挂载点为 /boot ,设备 sda2 没有挂载点,设备 sda3 的挂载点为 / 。
# 磁盘分区
# ⼩于2TB存储磁盘, 可选分区⼯具 fdisk
//⽣产分区建议: 如⽆特殊需求, 直接使⽤整个磁盘即可, ⽆需分区
//学习分区建议:1P+1E(3L) 2P+1E(2L) 3P+1E(1L) (仅适⽤于练习)
fdisk -l
fdisk /dev/sdb
Command (m for help): m //输⼊m列出常⽤的命令
Command action
a toggle a bootable flag //切换分区启动标记
b edit bsd disklabel //编辑sdb磁盘标签
c toggle the dos compatibility flag //切换dos兼容模式
d delete a partition //删除分区
l list known partition types //显示分区类型
m print this menu //显示帮助菜单
n add a new partition //新建分区
o create a new empty DOS partition table //创建新的空⽩分区表
p print the partition table //显示分区表的信息
q quit without saving changes //不保存退出
s create a new empty Sun disklabel //创建新的Sun磁盘标签
t change a partition's system id //修改分区ID,可以通过l查看id
u change display/entry units //修改容量单位,磁柱或扇区
v verify the partition table //检验分区表
w write table to disk and exit //保存退出
x extra functionality (experts only) //拓展功能
//创建主分区
Command (m for help): n //新建分区
Partition type:
p primary (0 primary, 0 extended, 4 free) //主分区
e extended //扩展分区
Select (default p): p //选择主分区
Partition number (1-4, default 1): //默认回⻋
First sector (2048-2097151, default 2048): //默认扇区回⻋
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): +50M //分配50MB
//创建扩展分区
Command (m for help): n //新建分区
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): e //创建扩展分区
Partition number (2-4, default 2):
First sector (104448-2097151, default 104448):
Using default value 104448
Last sector, +sectors or +size{K,M,G} (104448-2097151, default 2097151): //默认划分所
有空间给扩展分区
//创建逻辑分区
Command (m for help): n //新建分区
Partition type:
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p): l //创建逻辑分区
Adding logical partition 5
First sector (106496-2097151, default 106496):
Using default value 106496
Last sector, +sectors or +size{K,M,G} (106496-2097151, default 2097151): +100M //分配
100MB空间
//查看分区创建
Command (m for help): p
Device Boot Start End Blocks Id System
/dev/sdb1 2048 104447 51200 83 Linux
/dev/sdb2 104448 2097151 996352 5 Extended
/dev/sdb5 106496 311295 102400 83 Linux
//保存分区
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
//检查磁盘是否是MBR分区⽅式
fdisk /dev/sdb -l|grep type
Disk label type: dos
//安装parted, 刷新内核⽴即⽣效,⽆需重启
yum -y install parted
// partprobe - inform the OS of partition table changes
partprobe /dev/sdb
// 格式化
mkfs.xfs /dev/sdb1
// 挂载
mount -t xfs /dev/sdb1 /db1/
# ⼤于2TB使⽤分区⼯具 gdisk
//安装gdisk⼯具
[root@i-m60lx3hh ~]#yum install gdisk
[root@i-m60lx3hh ~]#gdisk /dev/sdb
Command (? for help): n //创建新分区
Partition number (1-128, default 1):
First sector (34-2097118, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-2097118, default = 2097118) or {+-}size{KMGTP}: +500M //分配500M⼤⼩
Command (? for help): p //打印查看
Number Start (sector) End (sector) Size Code Name
1 2048 1026047 500.0 MiB 8300 Linux filesystem
Command (? for help): w //保存分区
Do you want to proceed? (Y/N): y //确认
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.
//检查磁盘是否是gpt格式
[root@i-m60lx3hh ~]# fdisk /dev/sdb -l|grep type
Disk label type: gpt
//安装parted, 刷新内核⽴即⽣效,⽆需重启
[root@i-m60lx3hh ~]# yum -y install parted
[root@i-m60lx3hh ~]# partprobe /dev/sdb
// 格式化
mkfs.xfs /dev/sdb2
// 挂载
mount -t xfs /dev/sdb1 /db2/
# 磁盘挂载
命令:mount挂载磁盘,实质为⽂件系统指定访问⼊⼝
mount -t //指定⽂件系统挂载分区,如ext4, xfs
mount -a //读取/etc/fstab配置⽂件的所有分区
mount -o //指定挂载参数
//fstab被损坏情况下,让只读⽂件系统可写(正常情况下不使⽤)
[root@i-m60lx3hh ~]#mount -o rw,remount /
//挂载/dev/sdb1⾄db1⽬录
[root@i-m60lx3hh ~]# mkdir /db1
[root@i-m60lx3hh ~]# mount -t xfs /dev/sdb1 /db1/
# 永久挂载磁盘
# 先获取磁盘的uuid
blkid | grep "sdb1"
//使用UUID挂载磁盘sdb1分区至于db1,临时挂载
mount UUID="0a251763-b1c8-4cf0-961b-652004ddda82" /db1
//把UUID写到/etc/fstab中,永久挂载
vi /etc/fstab
UUID=0a251763-b1c8-4cf0-961b-652004ddda82 /db1 xfs defaults 0 0
⚠️:fstab一定要按照格式写
//分区标识(UUID或设备名) 挂载点 ⽂件类型 挂载参数 不检查 不备份
UUID=683a861a-0d76-4f87-9dcc-a3424a87e58b /db1 xfs defaults 0 0
//挂载参数, 可写fstab配置⽂件, 也可以mount时使⽤-o参数指定
参数 参数意义 系统默认值
async 系统每隔⼀段时间把内存数据写⼊磁盘中,
sync 时时同步内存和磁盘中数据;
suid,nosuid 允许/不允许分区有suid属性 suid
rw,ro 可以指定⽂件系统是只读(ro)或可写(rw) rw
exec,noexec 允许/不允许可执⾏⽂件执⾏,不要挂载根分区 exec
user,nouser 允许/不允许root外的其他⽤户挂载分区 nouser
auto,noauto 开机⾃动挂载/不⾃动挂载 auto
default 默认⽂件系统挂载设置 rw, suid, dev, exec, auto, nouser, async
# 卸载挂载磁盘
umount /db1
//强制卸载
umount -lf
//使用设备名卸载
umount /dev/sdb1
//过滤谁在使用磁盘
lsof |egrep db1
fuser也可以
# 虚拟磁盘SWAP
通过将一部分硬盘空间作为虚拟内存使用,来扩展内存容量。当物理内存不足时,系统会将一部分暂时不用的内存数据存储到虚拟磁盘SWAP中,以释放物理内存,从而保证系统的正常进行。
1、创建swapfile
dd if=/dev/zero of=/opt/newdisk bs=40k count=102400
//if:指定源 ⼀般写/dev/zero
//of:指定⽬标
//bs:定义块⼤⼩
//count:数量
2、格式化swap分区
mkswap -f /opt/newdisk
3、检测当钱swap分区情况
free -m
4、启动虚拟磁盘,并检查
swapon /opt/newdisk
5、关闭虚拟硬盘,并检查
swapoff /opt/newdisk
# 创建swap分区并且持久化使用
考试题目:一般是新建一个分区,并且把分区作为swap分区使用
# 查看内存和交换分区的使用情况
free -m
# swapon -s 也能⽤该命令查看,只是默认也是没有交换分区所有没有输出
fdisk -l /dev/sdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase.
Use at your own discretion.
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt
Disk identifier: 38070BAD-1DC0-4CFE-844A-D88D3DABB696
# Start End Size Type Name
1 2048 1026047 500M Linux filesyste Linux filesystem <---准备把该分区作
为交换分区
1、新建⼀个分区,并且把分区类型更改为82
新分区我们在上⾯的练习已经完成了,所以本例⼦不⽤分区,⽽是需要修改该分区的类型
# fdisk /dev/sdb
命令(输⼊ m 获取帮助):l 列出所有⽀持的分区类型对应的id
命令(输⼊ m 获取帮助):t 修改分区id
分区号 (1-5,默认 5):1 修改第1个分区
Hex 代码(输⼊ L 列出所有代码):14 修改成id为14
已将分区“Linux”的类型更改为“Linux swap / Solaris”
命令(输⼊ m 获取帮助):p
。。。
设备 Boot Start End Blocks Id System
1 2048 1026047 500M Linux swap Linux filesystem<---修改成功
命令(输⼊ m 获取帮助):w
强烈建议: 对分区做了修改后都刷新⼀下
# partprobe /dev/vdb
2、把vdb2格式化为交换分区
# mkswap /dev/sdb1
mkswap: /dev/sdb1: warning: wiping old xfs signature.
Setting up swapspace version 1, size = 511996 KiB
no label, UUID=cd146d62-e6ab-4d06-8c9b-1958af263a95
3、启动交换分区
# swapon /dev/sdb1 或者 # swanon -a 启动所有交换分区
查看
# swapon -s
# swapon -s
Filename Type Size Used Priority
/dev/sda2 partition 3146748 0 -1
/dev/sdb1 partition 511996 0 -2
4、持久化保存交换分区的使⽤
# blkid /dev/sdb1
/dev/sdb1: UUID="cd146d62-e6ab-4d06-8c9b-1958af263a95" TYPE="swap" PARTLABEL="Linux
filesystem" PARTUUID="d16478c9-448d-4ffd-8742-aaaf23e8b248"
# vim /etc/fstab
....
UUID=cd146d62-e6ab-4d06-8c9b-1958af263a95 swap swap defaults 0 0
# 案例
Inode被沾满,导致磁盘有可⽤的剩余空间也⽆法继续使⽤
[root@i-m60lx3hh ~]# dd if=/dev/zero of=/opt/newdisk bs=1k count=1024
[root@i-m60lx3hh ~]# mkfs.ext4 -i 1024 /opt/newdisk
[root@i-m60lx3hh ~]# mkdir /data
[root@i-m60lx3hh ~]# mount -t ext4 -o loop /opt/newdisk /data/
[root@i-m60lx3hh data]# touch {1..20000}
touch: cannot touch ‘19986’: No space left on device
touch: cannot touch ‘19987’: No space left on device
touch: cannot touch ‘19988’: No space left on device
[root@i-m60lx3hh data]# df -h
/dev/loop0 891K 38K 782K 5% /data #有空间可以使用
[root@i-m60lx3hh data]# df -i
/dev/loop0 1024 1024 0 100% /data # inode满了无法创建文件
// 清理
[root@i-m60lx3hh data]# find ./ -type f -name "[0-9]*" |xargs rm -rf
⚠️:find后边的路径一定是删除文件的路径
# 案例Block空间即将被沾满, 但删除⼤⽂件也没有释放空间
[root@i-m60lx3hh data]# yum install nginx -y
[root@i-m60lx3hh data]# vim /etc/nginx/nginx.conf
access_log /data/log/nginx/access.log main;
[root@i-m60lx3hh data]# mkdir -p /data/log/nginx/ # 创建目录
[root@i-m60lx3hh data]# chown nginx:nginx -R /data/log/ #更改属为nginx
//模拟⼤量的⽂件写⼊
[root@i-m60lx3hh nginx]# seq 120000 > access.log
[root@i-m60lx3hh nginx]# seq 140000 > access.log
seq: write error: No space left on device
[root@i-m60lx3hh nginx]# nginx -s reload #重启nginx可以解决
方法二:
[root@i-m60lx3hh nginx]# lsof |grep delete #查询delete操作
[root@i-m60lx3hh nginx]# ps aux |egrep 16166 #实际上是由于资源文件已经被删除了,但是nginx进程还在打开的一个程序,nginx把它打开后会把它加载到内存和磁盘里,人工删除文件后不会释放data目录的数据,此时需要杀掉进程解决
[root@i-m60lx3hh nginx]# kill -9 15816 16166 16167 # 但是此时nginx进程也挂了
方法三:
通过重定向
[root@i-m60lx3hh nginx]# > access.log
LVM
在linux上的磁盘管理技术。允许用户将多个硬盘分区或者整个硬盘合并成一个逻辑卷,并且可以在逻辑卷上创建、删除、调整大小等操作,而不需要重新分区或者重新格式化硬盘。
1、部署逻辑卷
创建物理卷,添加物理硬盘
创建卷组,添加物理卷加入到该卷组
在卷组中划分逻辑卷
//准备物理硬盘
lsblk |grep "sd[bcd]"
//将磁盘加入pv
pvcreate /dev/sdb
//检查pv创建情况
pvs
//创建名为datavg的卷组
vgcreate datavg /dev/sdb
//检查卷组
vgs
//创建逻辑卷,分配名称,以及大小,指定卷组
lvcreate -L 100M -n lv1 datavg
//检查逻辑卷
lvscan
//格式化文件系统
mkfs.xfs /dev/datavg/lv1
//挂载并使⽤
mkdir /lv1
mount /dev/datavg/lv1 /lv1/
df -h
# 卷组池管理
// 扩展卷组VG, 扩⼤VG卷组
1、新硬盘加⼊pv
pvcreate /dev/sdc
2、使⽤vgextend扩展
vgextend datavg /dev/sdc
//移除卷组VG, 移除vg组中某⼀块硬盘
vgreduce datavg /dev/sdb
# 数据迁移卷组VG, 同⼀卷组的磁盘才可以进⾏在线迁移
1、检查当前逻辑卷VG中pv使用情况
pvs
2、pvmove在线数据迁移⾄其他pv
pvmove /dev/sdb
3、检查是否将sdb数据迁移⾄sdc
pvs
# 扩容逻辑卷
//逻辑卷的扩展, 取决于vg卷中剩余多少容量, 扩展容量不能超过卷组VG
vgs
VG #PV #LV #SN Attr VSize VFree
vg1 2 2 0 wz --n- 1.88g 1.00g
1、扩展lv逻辑卷
lvextend -L +800M /dev/datavg/lv1
lvextend -l +50%FREE /dev/datavg/lv1
3、扩展fs⽂件系统
//xfs扩容
xfs_growfs /dev/datavg/lv1 #刷新
//ext扩容
resize2fs /dev/datavg/lv1
# 缩小逻辑卷
umount /lv1
lvresize -L 500M /dev/datavg/lv1
WARNING: Reducing active logical volume to 500.00 MiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce datavg/lv1? [y/n]: y
Size of logical volume datavg/lv1 changed from <1.05 GiB (268 extents) to 500.00 MiB
(125 extents).
Logical volume datavg/lv1 successfully resized.
mkfs.xfs -f /dev/datavg/lv1 #格式化
mount /dev/datavg/lv1 /lv1/
# 删除逻辑卷
umount /lv1
lvremove /dev/datavg/lv1

浙公网安备 33010602011771号