linux的磁盘管理

认识磁盘

  • 从外到内,磁道从0~XXX。
  • 扇区默认512字节
  • 先读完一个柱面的0号磁道,接着读第二个柱面的0号磁道......直至所有柱面的0号磁道读写完毕,进入下一个磁道。

磁盘命名规则

物理磁盘:sd开头;虚拟磁盘vd开头

sdb1:第二块物理磁盘的第二个分区

查看磁盘的uuid号

bash 复制代码
[root@web~]# blkid
/dev/sda1: UUID="bd68c0c6-6244-40d9-822c-c3f4cb42089d" TYPE="xfs" 
/dev/sda2: UUID="d1d71726-0fc7-421a-92b9-bd94bee023d4" TYPE="swap" 
/dev/sda3: UUID="74cddce8-5b9d-4220-a1b9-165aba807f6b" TYPE="xfs"

raid卷

做raid好处
  1. 提高磁盘冗余
  2. 提高读写性能
  3. 更多的磁盘容量
raid级别
raid名称 硬盘数 安全性 容量 性能 场景
raid0 1~ 所有磁盘之和 读写快 从节点
raid1 2 最多坏1 一半 读OK写慢 系统盘
raid5 3~ 最多坏1 n-1/n 读OK写慢 普通数据库
raid10 4~(2的倍数) 最多坏一半 一半 读写快 高并发,主库

raid5校验原理:所有校验数据数据加起来正好是一块硬盘容量。

  • 为了更好的冗余,还可以在raid5增加一个热备盘
raid10结构图

MBR分区类型

  • MBR所处磁盘位置:0磁道的1扇区

  • MPR:每块硬盘上存放的硬盘引导程序,总共512字节

  • 这512字节里包含:

    • 引导程序446字节(MBR)

    • 磁盘分区表

    • 结束标记55AA

MBR缺点
  • 一个磁盘支持的最大容量只有2T
  • 最多只能4个主分区,若要做到更多分区。则要用到拓展分区

假设有一个1T的磁盘

  • 如果一个分区用了1T,那么无法继续创建分区

  • 4个主分区总共用了600G,还有400G是无法使用的,造成了浪费。

MBR缺点解决

在第四块分区设为拓展分区,以达到不断拓展效果

GPT分区类型和parted命令

优点:主分区可以无限。所用命令为parted

parted

parted分区是实时生效,不像fdisk在内存中。

parted命令介绍

parted内部命令 说明
mktable/mklable gpt/msdos 磁盘引导类型GPT/MBR
p 查看当前分区
mkpart 分区名 开始 结束 创建分区及分区名、分区大小
rm +nuber 删除分区
resizepart 调整已有分区的大小,如resizepart 1 100% resizepart 1 512GB

parted分区(交互式)

MVME磁盘

1.给Centos7添加一块Nvme硬盘(SCSI也可以)

2.查看系统已经识别到新加的硬盘nvme0n1

bash 复制代码
[root@wzy dev]# lsblk                                                     
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0  128G  0 disk 
...........省略
nvme0n1         259:0    0   32G  0 disk

3.设置为GPT分区

bash 复制代码
parted /dev/nvme0n1

(parted) mktable  gpt
警告: The existing disk label on /dev/nvme0n1 will be destroyed and all data on this disk will be lost. Do you want to continue?
是/Yes/否/No? Yes      #出现提示:操作回清除数据选Yes                                                   
(parted)

4.用p查看当前成为了GPT

bash 复制代码
(parted) p                                                                
Model: NVMe Device (nvme)
Disk /dev/nvme0n1: 34.4GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt	#GPT分区
Disk Flags: 
Number  Start  End  Size  File system  Name  标志
(parted)

5.mkpart命令开始分区

nvdisk是分区名。0表示开始,100是结束,所以这个分区最终大小是100MB。

bash 复制代码
(parted) mkpart nvdisk1 0 100
警告: The resulting partition is not properly aligned for best performance.
忽略/Ignore/放弃/Cancel? Ignore                                           
(parted)

6.查看分区1

bash 复制代码
(parted)p
Model: NVMe Device (nvme)
Disk /dev/nvme0n1: 34.4GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 
Number  Start   End    Size   File system  Name     标志
 1      17.4kB  100MB  100MB               nvdisk1

7.继续创建分区

bash 复制代码
(parted) mkpart nv2 100 300
(parted) p                                                                
.........
Number  Start   End    Size   File system  Name  标志
 1      17.4kB  100MB  100MB               nv1
 2      100MB   300MB  200MB               nv2

8.用lsblk命令查看磁盘

多了2个分区

bash 复制代码
nvme0n1         259:0    0    32G  0 disk 
├─nvme0n1p1     259:1    0  95.4M  0 part 
└─nvme0n1p2     259:2    0 190.8M  0 part 

9.格式化磁盘分区,挂载后就可以使用了

bash 复制代码
[root@wzy mnt]# mkfs.xfs /dev/nvme0n1p1
[root@wzy mnt]# mount /dev/nvme0n1p1 /mnt
[root@wzy mnt]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 475M     0  475M    0% /dev
........
/dev/nvme0n1p1            93M  5.0M   88M    6% /mnt

SATA磁盘

bash 复制代码
[root@m05~]# parted /dev/sdc
GNU Parted 3.1
使用 /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt                                                      
警告: The existing disk label on /dev/sdc will be destroyed and all data on this disk will be lost. Do you want to continue?
是/Yes/否/No? yes       

# 创建一个主分区类型为ext4
(parted) mkpart primary ext4 0% 648GB                                    

# 查看所有分区
(parted) p                                                                
Model: ATA VMware Virtual S (scsi)
Disk /dev/sdc: 2199GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End    Size   File system  Name     标志
 1      1049kB  648GB  648GB  ext4         primary

# 退出parted模式
(parted) quit                                                             
信息: You may need to update /etc/fstab.

[root@m05~]# lsblk /dev/sdc1
NAME MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sdc1   8:33   0 603.5G  0 part

[root@m05~]# mkfs.ext4 /dev/sdc1

# 然后就是挂载步骤,略...

parted分区案例(使用整块磁盘&非交互式)

创建一个目录/data-sdc1,把整个磁盘sdc挂载上去。要求使用parted命令,设置GPT分区

bash 复制代码
[root@m05~]# lsblk /dev/sdc
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdc    8:32   0   2T  0 disk

1.查看磁盘信息,先确认 /dev/sdc 的当前状态:

bash 复制代码
[root@m05~]# parted /dev/sdc print
错误: /dev/sdc: unrecognised disk label
Model: ATA VMware Virtual S (scsi)                                        
Disk /dev/sdc: 2199GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:

2.创建 GPT 分区表,将磁盘的分区表设置为 GPT:

bash 复制代码
[root@m05~]# parted /dev/sdc mklabel gpt
信息: You may need to update /etc/fstab.

[root@m05~]# echo $?                                                      
0

3.创建一个新的分区,创建一个覆盖整个磁盘的分区:

bash 复制代码
[root@m05~]# parted /dev/sdc mkpart primary ext4 0% 100%
信息: You may need to update /etc/fstab.
[root@m05~]# echo $?                                                      
0

[root@m05~]# lsblk /dev/sdc
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdc      8:32   0   2T  0 disk 
└─sdc1   8:33   0   2T  0 part

primary:分区类型。

ext4:文件系统类型(仅标识,实际文件系统需要单独创建)。

0% 和 100%:起始和结束范围,表示使用整个磁盘。

4.格式化分区,将新创建的分区格式化为 ext4 文件系统:

bash 复制代码
[root@m05~]# mkfs -t ext4 /dev/sdc1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
134217728 inodes, 536870400 blocks
26843520 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2684354560
16384 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
	102400000, 214990848, 512000000

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成       

[root@m05~]#

5.挂载并查看:

bash 复制代码
[root@m05~]# mkdir /data-sdc1
[root@m05~]# mount /dev/sdc1 /data-sdc1/
[root@m05~]# df -Th /dev/sdc1
文件系统       类型  容量  已用  可用 已用% 挂载点
/dev/sdc1      ext4  2.0T   81M  1.9T    1% /data-sdc1

磁盘安装(fdisk操作)

  1. 分区
  2. 分配文件系统
  3. 挂载

硬盘添加前:

[root@wzyCentos mnt]# ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2

硬盘添加后:

[root@wzyCentos ~]# ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sdb  /dev/sdc

b c代表硬盘块数;b表示第二块硬盘,c第三块

fdisk命令

进入fdisk后删除键无法使用,用Ctrl + 删除键或Ctrl + U

fdisk命令选项 说明
-l 列出硬盘,不指定磁盘,默认列出所有
fdisk内部命令 说明
d 删除分区
n 新建分区
w 执行所做操作
h 获取帮助
p 查看此块磁盘分区信息
t 更改分区号
  • 拓展分区最多只有一个,创建一个拓展分区后只能创建逻辑分区
  • 逻辑分区号只能从5开始,即使1-4还有空余分区号
  • 未挂载前,只能看到磁盘文件,df -h看不到
bash 复制代码
[root@wzy test]# ls /dev/sdb*
/dev/sdb  /dev/sdb1  /dev/sdb2  /dev/sdb5
fdisk分区操作

安装步骤

  1. fdisk /dev/sdb

m查看帮助

  1. n新建分区
  • p 主分区
  • e 扩展分区
  1. 扇区默认
bash 复制代码
Select (defaultp): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
  1. 添加想要的容量

    Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+20m

bash 复制代码
命令(输入 m 获取帮助):p		#使用p查看出现了sdb1分区
   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048       43007       20480   83  Linux
  1. 所做配置写入磁盘

注意提示所以输入w之前操作都是在内存当中,退出后不会发生任何变化

bash 复制代码
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。

创建文件系统

mkfs 创建文件系统,并把磁盘分区格式化

mkfs.xfs /dev/sdb1

mkfs命令 说明
mkfs.xxx 要设置的文件系统
-f 强制转化
-t 指定文件系统类型
xfs(xfs为Centos7默认) ext4 文件系统类型

挂载分区

磁盘分区作为一个设备文件,需要一个目录作为进入的入口,所以把格式化的分区挂载在一个目录。例如/mnt

挂载相关命令 说明
mount 挂载
umount 卸下挂载

自动挂载使用fstab实现

系统重启后挂载会丢失

方法1:在/etc/rc.local中写入挂载命令

方法2:专门执行挂载的配置文件/etc/fstab

fstab文件分析

位于:/etc/fstab

fstab字段分析:

  • 设备名

    文件系统对应的设备或分区(如 /dev/sdb1),也可以使用 UUID 或标签(如 UUID=xxxx-xxxx 或 LABEL=MyDisk)

  • 挂载点

    文件系统在系统中的挂载位置(如 /home 或 /mnt/data)

  • 文件系统类型

    文件系统格式(如 ext4、xfs、swap、ntfs)

  • 挂载选项

    挂载时的选项,用逗号分隔(如 defaults、ro、noatime 等)

    • defaults默认选项,相当于 rw, suid, dev, exec, auto, nouser, async
    • noexec,禁止在挂载点运行二进制文件
    • nosuid,禁止 SUID 和 SGID 位的权限提升
    • nodev,禁止解析挂载点上的设备文件
    • noatime / relatime,禁止或优化 文件最近访问时间的更新,以提升性能。noatime 完全禁用更新,relatime 仅在最近一次修改或访问时间较旧时更新
    • sync / async,数据写入方式,sync 为同步写入,async 为异步写入
    • uid / gid,指定挂载的所有者用户(UID)和用户组(GID)
    • user / nouser,允许(user)或禁止(nouser)非管理员用户挂载
  • 转储选项

    用于备份程序(dump)。0 表示忽略;1 表示优先备份;2 表示次级备份

  • 文件系统检查顺序

    fsck 启动时检查文件系统的顺序。0 表示不检查;1 表示优先检查(通常是根文件系统);2 表示次级检查。

设备名/UUID 挂载点 文件系统 挂载选项 转储选项 文件系统检查顺序
/dev/sdb1 /mnt xfs defaults 0 0

swap交换分区

  • 内存不足危害:系统会随机杀死进程

  • swap概述:使用一部分硬盘空间充当虚拟内存使用,但性能不如物理内存

  • swap查看:free -h查看总体内存使用状况,包括虚拟内存

bash 复制代码
[root@wzy mnt]# free -h
              total        used        free      shared  buff/cache   available
Mem:           972M        213M        639M        7.6M        119M        625M
Swap:          2.0G          0B        2.0G

swap扩容

1.创建一个1G的交换文件

dd if=/dev/zero of=/tmp/swap1g bs=1M count=1000

  • if = input file
  • of = outputfile
  • bs 读取大小
  • count 读取次数

2.把swp文件格式化

mkswap /tmp/swap1g

3.修改为0600权限

chmod 0600 /tmp/swap1g

4.挂载

swapon /tmp/swap1g

永久挂载在fstab文件中增加,或者在rc.local文件中写入对应命令

/dev/swap1g swap swap defaults 0 0

5.维护命令,取消swap

       total        used        free      shared  buff/cache   available

Mem: 972M 213M 639M 7.6M 119M 625M

Swap: 2.0G 0B 2.0G

### swap扩容

1.创建一个1G的交换文件

`dd if=/dev/zero of=/tmp/swap1g bs=1M count=1000`

- if = input file
- of = outputfile
- bs 读取大小
- count 读取次数

2.把swp文件格式化

`mkswap /tmp/swap1g`

3.修改为0600权限

`chmod 0600 /tmp/swap1g`

4.挂载

`swapon /tmp/swap1g`

永久挂载在fstab文件中增加,或者在rc.local文件中写入对应命令

`/dev/swap1g	swap	swap	defaults 0 0` 

5.维护命令,取消swap

`swapoff /tmp/swap1g`
相关推荐
Pou光明23 分钟前
1_linux系统网络性能如何优化——几种开源网络协议栈比较
linux·运维·网络·网络协议·开源
路-buan33 分钟前
华为eNSP:VRRP的主备备份
网络·华为·智能路由器
feing.34 分钟前
路由介绍.
网络
Tony聊跨境1 小时前
如何绕过IP禁令
网络·网络协议·tcp/ip·智能路由器·ip
fen_fen1 小时前
Docker如何运行一个python脚本Hello World
运维·docker·容器
C++忠实粉丝1 小时前
计算机网络之NAT、代理服务、内网穿透、内网打洞
网络·c++·网络协议·计算机网络·http·智能路由器
TianyaOAO1 小时前
inmp+discuz论坛
linux·运维·服务器
qq_254674411 小时前
华为 生产网解决方案,加速制造业数字化转型
网络
星光璀璨山河无恙2 小时前
【Linux】grep命令
大数据·linux
寒月6582 小时前
黑盒白盒测试
运维·服务器