linux系统磁盘管理
文章目录
- 1.磁盘基本概述
- 1.1 磁盘分类
- 1.2 固态硬盘的优缺点
- 1.3Linux中磁盘命名方式
- 1.4 MBR与GPT
- 2.磁盘容量检查
- 3.磁盘分区
- 3.1 fdisk分区
- 3.2 gdisk分区
- 4.磁盘格式化
- 5.磁盘挂载
- 5.1临时挂载磁盘
- 5.2永久挂载磁盘
- 5.3卸载挂载磁盘
- 6.交换分区SWAP
- 6.1创建swapfile
- 6.2格式化swap分区
- 6.3检测当前swap分区情况
- 6.4开启新建的swap分区
- 6.5关闭新建的swap分区
- 7.生产磁盘故障案例
1.磁盘基本概述
1.1 磁盘分类
- 固态硬盘
- 机械硬盘
- 服务器硬盘
1.2 固态硬盘的优缺点
- 优点:
- 读写速度快
- 防震抗摔性强
- 低功耗
- 无噪音
- 体积小,携带方便
- 缺点:
- 容量比机械硬盘小
- 寿命比机械硬盘短
- 制造成本高所以价格比机械硬盘高
1.3Linux中磁盘命名方式
Linux中磁盘的命名方式与磁盘的接口有关,规则如下:
- 传统IDE接口硬盘:/dev/hd[a-z]- SCISI接口硬盘:/dev/sd[a-z]- 虚拟化硬盘:/dev/vd[a-z]
在设备名称的定义规则如下,其他的分区以此类推:
- 系统的第一块SCSI接口的硬盘名称为/dev/sda
- 系统的第二块SCSI接口的硬盘名称为/dev/sdb
- 系统中分区由数字编号表示,1-4留给主分区使用和扩展分区,逻辑分区从5开始
//第一块磁盘
/dev/sda
//第一块磁盘的第一个分区
/dev/sda1
//第二块磁盘的第一个分区
/dev/sdb1
1.4 MBR与GPT
在使用新磁盘之前,必须对其进行分区,MBR和GRT是在磁盘上储存分区信息的两种不同的方式。这些分区信息包含了分区从哪里开始的信息,这样操作系统才知道那个扇区是属于哪个分区,以及那个分区是可以启动的,在磁盘上创建分区时,必须使用MBR或GPT
MBR是master boot record的简称,也就是主引导记录,是位于磁盘最前边的一段引导(loader)代码,主要用来引导操作系统的加载与启动
特点
1.MBR支持最大2TB容量的磁盘
2.只支持最多4个主分区。若想要更多分区,需要创建扩展分区,并在其中创建逻辑分区
GPT是guid partition table的简称,是指使用guid分区表的磁盘,guid磁盘分区表其含义为“全局唯一标识磁盘分区表”,是一个实体硬盘的分区表的结构布局的标准
特点:
1.GPT对磁盘大小没有限制
2.最多可以创建128个分区
MBR与GPT之间互相转换会导致数据丢失
2.磁盘容量检查
使用df命令查看磁盘容量,不加参数以k为单位
df -i //查看inode使用情况
df -h //以G或者T或者M人性化方式显示
df -T //查看文件类型
[root@lishan ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/rhel-root 17G 1.9G 16G 11% /
devtmpfs 901M 0 901M 0% /dev
tmpfs 912M 0 912M 0% /dev/shm
tmpfs 912M 8.6M 904M 1% /run
tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda1 1014M 143M 872M 15% /boot
tmpfs 183M 0 183M 0% /run/user/0
使用lsblk查看分区情况:
[root@lishan ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part ├─rhel-root 253:0 0 17G 0 lvm /└─rhel-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
sr0 11:0 1 3.8G 0 rom
使用du命令查看目录或者文件的容量,不加参数以k为单位:
[root@lishan ~]# du -sh /opt
3.6M /opt
du -sh opt //人性化输出显示大小
-s:列出总和
-h:人性化显示容量信息
3.磁盘分区
分区之前,需要先给虚拟机添加一块硬盘,步骤如下:
- 找到对应虚拟机点击右键,选择设置
- 在硬件向导里面点击添加按钮,在硬件类型中选中“硬盘”,点击下一步
3.磁盘类型选择默认,然后创建新虚拟磁盘,调整大小(不勾选立即分配空间)- 最后点击下一步,完成
分区工具有fdisk和gdisk,当硬盘小于2T的时候我们应该用fdisk来分区,而当硬盘大于2T的时候则应用gdisk来进行分区
3.1 fdisk分区
//生产分区建议: 如无特殊需求, 直接使用整个磁盘即可, 无需分区
//学习分区建议:1P+1E(3L) 2P+1E(2L) 3P+1E(1L) (仅适用于练习)
//列出分区表[root@lishan ~]# fdisk -l
磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000ac05b设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 41943039 19921920 8e Linux LVM磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节磁盘 /dev/mapper/rhel-root:18.2 GB, 18249416704 字节,35643392 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节磁盘 /dev/mapper/rhel-swap:2147 MB, 2147483648 字节,4194304 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节[root@localhost ~]# fdisk /dev/sdb
Command (m for help): m //输入m列出常用的命令
Command actiona 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查看idu 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空间//查看分区创建
命令(输入 m 获取帮助):P
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xa46ce41f设备 Boot Start End Blocks Id System
/dev/sdb1 2048 104447 51200 83 Linux
/dev/sdb2 104448 41943039 20919296 5 Extended
/dev/sdb5 106496 311295 102400 83 Linux
/dev/sdb6 313344 518143 102400 83 Linux
/dev/sdb7 520192 724991 102400 83 Linux
/dev/sdb8 727040 931839 102400 83 Linux
/dev/sdb9 933888 1138687 102400 83 Linux
/dev/sdb10 1140736 1345535 102400 83 Linux
//删除分区
命令(输入 m 获取帮助):d
分区号 (1,2,5-10,默认 10):10
分区 10 已删除//检查磁盘是否是gpt格式
[root@localhost /]# fdisk /dev/sdb -l|grep type
Disk label type: gpt//安装parted, 刷新内核立即生效,无需重启
[root@localhost ~]# yum -y install parted //也可以用来分区
[root@localhost ~]# partprobe /dev/sdb
3.2 gdisk分区
//安装gdisk工具
[root@lishan ~]# yum -y install gdisk[root@localhost ~]# 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 Name1 2048 1026047 500.0 MiB 8300 Linux filesystemCommand (? 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@localhost /]# fdisk /dev/sdb -l|grep type
Disk label type: gpt//安装parted, 刷新内核立即生效,无需重启
[root@localhost ~]# yum -y install parted
[root@localhost ~]# partprobe /dev/sdb
4.磁盘格式化
使用mkfs命令格式化磁盘,目的:创建文件系统
//mkfs常用的选项有
-b //设定数据区块占用空间大小,目前支持1024、2048、4096 bytes每个块。
-t //用来指定什么类型的文件系统,可以是ext3,ext4, xfs
-i //设定inode的大小
-N //设定inode数量,防止Inode数量不够导致磁盘不足
-L //预设该分区的标签label
//格式化整个sdb磁盘为ext4文件系统
[root@localhost ~]# mkfs.ext4 /dev/sdb1//也可以使用-t指定方式创建ext4文件系统
[root@localhost ~]# mkfs -t ext4 /dev/sdb1//也可以格式化sdb1分区为xfs文件系统
[root@localhost ~]# mkfs.xfs /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
128016 inodes, 512000 blocks
25600 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=34078720
63 block groups
8192 blocks per group, 8192 fragments per group
2032 inodes per group
Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (8192 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 //也可以格式化sdb1分区为xfs文件系统
[root@localhost ~]# mkfs.xfs /dev/sdb1//查看文件UUID及文件类型
[root@lishan ~]# blkid
/dev/sda1: UUID="997467a2-f410-413a-b2f1-487dc1d127d5" TYPE="xfs"
/dev/sda2: UUID="9vBxmN-PfyF-aCy2-COWR-so11-D5XT-a0R7R5" TYPE="LVM2_member"
/dev/sdb1: UUID="430b7951-9983-458f-bd03-967023ade9c7" TYPE="ext4"
/dev/sr0: UUID="2017-07-11-01-39-24-00" LABEL="RHEL-7.4 Server.x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/mapper/rhel-root: UUID="44061d95-2a57-4af0-b9e4-742fb644ea92" TYPE="xfs"
/dev/mapper/rhel-swap: UUID="a05137de-7ef1-4bbc-9a86-36eb10988ed3" TYPE="swap"
5.磁盘挂载
挂载磁盘要注意以下几点
- 挂载分区前需要创建挂载点,挂载点以目录形式出现
- 如果向挂载点目录写入数据,实际上会写入到该分区
- 挂载点建议空目录,不是也不影响挂载分区的使用,但是会隐藏原有的文件
5.1临时挂载磁盘
命令:mount挂载磁盘,实质为文件系统指定访问入口
mount -t //指定文件系统挂载分区,如ext3,ext4, xfs
mount -a //重新读取/etc/fstab配置文件的所有分区
mount -o //指定挂载参数//fstab被损坏情况下,让只读文件系统可写(正常情况下不使用)
[root@localhost ~]#mount -o rw,remount / //挂载/dev/sdb1至db1目录
[root@lishan ~]# mkdir /opt/sean
[root@lishan ~]# mount -t ext4 /dev/sdb1 /opt/sean///查看挂载
[root@lishan ~]# df -T
文件系统 类型 1K-块 已用 可用 已用% 挂载点
/dev/mapper/rhel-root xfs 17811456 1936868 15874588 11% /
devtmpfs devtmpfs 922444 0 922444 0% /dev
tmpfs tmpfs 933512 0 933512 0% /dev/shm
tmpfs tmpfs 933512 8788 924724 1% /run
tmpfs tmpfs 933512 0 933512 0% /sys/fs/cgroup
/dev/sda1 xfs 1038336 145856 892480 15% /boot
tmpfs tmpfs 186704 0 186704 0% /run/user/0
/dev/sdb1 ext4 487634 2318 455620 1% /opt/sean
5.2永久挂载磁盘
//使用blkid命令获取各分区的UUID
[root@lishan sean]# blkid |grep "sdb1"
/dev/sdb1: UUID="430b7951-9983-458f-bd03-967023ade9c7" TYPE="ext4"
//使用UUID挂载磁盘sdb1分区至于/opt/sean,临时挂载
[root@localhost ~]# mount UUID="e271b5b2-b1ba-4b18-bde5-66e394fb02d9" /opt/sean
//也可以把下面这行写到/etc/fstab中,永久挂载,开机自动挂载
[root@localhost ~]# tail -1 /etc/fstab
UUID=e271b5b2-b1ba-4b18-bde5-66e394fb02d9 /db1 xfs defaults 0 0//加载fstab配置文件, 同时检测语法是否有错误
[root@localhost ~]# mount –a
fstab配置文件介绍:
[root@localhost ~]# vim /etc/fstab//分区标识(UUID或设备名) 挂载点 文件类型 挂载参数 不检查 不备份
UUID=e271b5b2-b1ba-4b18-bde5-66e394fb02d9 /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//加载所有配置
[root@localhost ~]# mount -a
5.3卸载挂载磁盘
umount -lf //强制卸载挂载
//使用站点目录卸载
[root@localhost ~]# umount /db1
//使用设备名卸载/dev/sdb1
[root@localhost ~]# umount /dev/sdb1//umount不能卸载的情况
[root@lishan sean]# umount /dev/sdb1
umount: /opt/sean:目标忙。(有些情况下通过 lsof(8) 或 fuser(1) 可以找到有关使用该设备的进程的有用信息)//如上情况解决办法有两种, 切换至其他目录 或使用'-l'选项强制卸载
[root@localhost db1]# umount -l /db1
[root@lishan sean]# umount -l /dev/sdb1
[root@lishan ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/rhel-root 17811456 1936872 15874584 11% /
devtmpfs 922444 0 922444 0% /dev
tmpfs 933512 0 933512 0% /dev/shm
tmpfs 933512 8792 924720 1% /run
tmpfs 933512 0 933512 0% /sys/fs/cgroup
/dev/sda1 1038336 145856 892480 15% /boot
tmpfs 186704 0 186704 0% /run/user/0
6.交换分区SWAP
交换分区swap就是Linux下的虚拟内存分区,它的作用就是在物理内存使用完之后,将磁盘空间(也就是swap分区)虚拟内存拿来使用。
交换分区一般指定虚拟内存的大小为实际内存的1.5~2倍。如果实际内存超过8GB,可以直接划分16GB给虚拟内存 即可,如果虚拟内存不够用的情况下,必须增加一个虚拟磁盘,由于不能给原有的磁盘重新分区,所以可以选择新建。
6.1创建swapfile
[root@lishan ~]# dd if=/dev/zero of=/opt/newdisk bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB)已复制,8.16166 秒,132 MB/秒//if:指定源 一般写/dev/zero
//of:指定目标
//bs:定义块大小
//count:数量
6.2格式化swap分区
[root@lishan ~]# mkswap -f /opt/newdisk
正在设置交换空间版本 1,大小 = 1048572 KiB
无标签,UUID=18cafa9b-c523-469a-83c6-e46d1ea42ef6
6.3检测当前swap分区情况
[root@lishan ~]# free -mtotal used free shared buff/cache available
Mem: 1823 148 1492 8 181 1491
Swap: 2047 0 2047 //原来是2GB
6.4开启新建的swap分区
[root@lishan ~]# swapon /opt/newdisk
swapon: /opt/newdisk:不安全的权限 0644,建议使用 0600。
[root@lishan ~]# free -mtotal used free shared buff/cache available
Mem: 1823 149 438 8 1234 1476
Swap: 3071 0 3071 //swap分区多出来1G
6.5关闭新建的swap分区
[root@lishan ~]# swapoff /opt/newdisk
[root@lishan ~]# free -mtotal used free shared buff/cache available
Mem: 1823 149 439 8 1234 1476
Swap: 2047 0 2047
//还原到原来没增加虚拟磁盘
//创建swap分区并且持久化使用例子: 给系统新增加一个交换分区(swap)考试题目:一般是要求新建一个分区,并且把分区作为swap分区使用查看内存和交换分区的使用情况
# free -mtotal used free shared buffers cached
Mem: 1841 613 1227 16 0 258
-/+ buffers/cache: 354 1486
Swap: 0 0 0 <--- 没有交换分区# swapon -s 也能用该命令查看,只是默认也是没有交换分区所有没有输出# fdisk -l /dev/sdb设备 Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 83 Linux
/dev/sdb2 2099200 6293503 2097152 83 Linux <---准备把该分区作为交换分区1、新建一个分区,并且把分区类型更改为82 新分区我们在上面的练习已经完成了,所以本例子不用分区,而是需要修改该分区的类型# fdisk /dev/sdb命令(输入 m 获取帮助):l 列出所有支持的分区类型对应的id命令(输入 m 获取帮助):t 修改分区id
分区号 (1-5,默认 5):2 修改第2个分区
Hex 代码(输入 L 列出所有代码):82 修改成id为82
已将分区“Linux”的类型更改为“Linux swap / Solaris”命令(输入 m 获取帮助):p设备 Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 83 Linux
/dev/sdb2 2099200 6293503 2097152 82 Linux swap / Solaris <---修改成功命令(输入 m 获取帮助):w强烈建议: 对分区做了修改后都刷新一下
# partprobe /dev/sdb2、把sdb2格式化为交换分区
# mkswap /dev/sdb2
正在设置交换空间版本 1,大小 = 2097148 KiB
无标签,UUID=ba08eb90-2003-44e6-9769-9a9351aebb053、启动交换分区
# swapon /dev/sdb2 或者 # swanon -a 启动所有交换分区查看
# swapon -s
文件名 类型 大小 已用 权限
/dev/sdb2 partition 2097148 0 -14、持久化保存交换分区的使用
# blkid /dev/sdb2
/dev/sdb2: UUID="ba08eb90-2003-44e6-9769-9a9351aebb05" TYPE="swap" # vim /etc/fstab
/dev/mapper/rhel-root / xfs defaults 0 0
UUID=cb3299d6-16e0-4644-9686-27907eefb8f3 /boot xfs defaults 0 0
UUID=ba08eb90-2003-44e6-9769-9a9351aebb05 swap swap defaults 0 0
7.生产磁盘故障案例
Inode被占满,导致磁盘有可用的剩余空间也无法继续使用
[root@localhost ~]# dd if=/dev/zero of=/opt/newdisk bs=1k count=1024
[root@localhost ~]# mkfs.ext4 -i 1024 /opt/newdisk
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount -t ext4 -o loop /opt/newdisk /data///inode被占满
[root@localhost ~]# touch {1..20000}
touch: cannot touch `19997': No space left on device
touch: cannot touch `19998': No space left on device
touch: cannot touch `19999': No space left on device
touch: cannot touch `20000': No space left on device//inode被占满,剩余block也是无法继续使用
[root@localhost ~]# df -i|grep data
/opt/newdisk 1024 1024 0 100% /data
[root@localhost ~]# df -h|grep data
/opt/newdisk 891K 34K 806K 5% /data
Block空间即将被占满, 但删除大文件也没有释放空间
- 问题:假设现在线上正在运行Nginx服务, Nginx产生的日志已经达到了20个G, 磁盘眼看就看沾满了, 请问不重启Nginx的方式如何处理
- //是会删除文件, 但Nginx持续占用着文件, 所以空间并不会被释放
rm -f access.log
//正确做法如下, 清空该文件即可释放文件内容(将空文件覆盖>到access.log日志中)
access.log
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
