linux之磁盘管理

磁盘管理

1.磁盘分类

  • 机械硬盘: 盘片 主轴 传动手臂 做机械运动 类似 DVD
  • 固态硬盘:内部是主板和U盘类似

2.硬盘大小

  • 3.5英寸:台式机
  • 2.5英寸:笔记本服务器

3.硬盘接口

  • IDE接口 过时

  • scsi接口 过时

  • sata接口 台式机 3.0

  • nvme接口 固态硬盘

  • SAS接口 企业级

4.硬盘存储和传输速度

  • sata 3.0接口硬盘 传输速度600MB/s 1T 2T 4T 8T 20T
  • NVMe接口硬盘 专为高性能SSD设计,基于PCIe总线
  • SAS接口硬盘 300G 600G 900G 转速5400 7200 10K 15K

5.磁盘阵列

  • 就是把多块硬盘组合起来使用,通过硬件或软件技术对数据存储空间、性能、速度、安全,稳定等特点,发挥特性。
  • 磁盘阵列的核心技术是 RAID,(Redundant Array of Independent Disks,独立磁盘冗余阵列),通过不同的配置方式平衡性能、可靠性和存储容量。

raid概念

  • 冗余:通过数据备份或校验机制,在硬盘故障时保护数据。
  • 切割:将数据分成小块分散存储在多块硬盘上,以提升读写速度。
  • 镜像:将数据完整复制到另一块硬盘上,增加数据冗余性。
磁盘阵列raid卡组合
作用:
获得更大的容量		 # 将多块磁盘逻辑的组合成一块磁盘
获得更高的性能	     # 写入服务器 写两块磁盘比写一块磁盘速度快
获得更好的安全性    # 可以同时将数据写入两块盘 一块盘做备份
RAID级别 硬盘数量 可用容量 安全性 性能 使用场景
0 至少1块 磁盘综合 读写速度块 要求速度
1 只能2块 50% 可坏一块 写最慢,读还行 要求安全与速度
5 至少3块 n-1(硬盘数量-1) 坏一块 0和1的折中 业务流量较稳定
10 至少4块 50% 坏50% 读写速度快 高并发场景

6.磁盘分区

  • windows磁盘默认的是MBR格式
  • MBR格式最多支持4个主分区 C D E F
  • MBR格式支持3个主分支+1个扩展分区

6.1 Linux磁盘分区fdisk

#磁盘表示
sda   # 表示第一块磁盘
    sda1 # 表示第一块磁盘的第一个分区
    sda2 # 表示第一块磁盘的第二个分区
sdb   # 表示第二块磁盘
    sdb1 # 表示第2块磁盘的第1个分区
    sdb5 # 表示第2块磁盘的第1个逻辑分区
    
#Linux磁盘分区
1.系统分区
第一种分区: 标准分区   300G磁盘
/boot   200M    # 存放系统内核的位置 引导程序所在的位置
/		剩余空间 # 存放系统

第二种分区: swap分区
/boot  200M
swap   2G       # 当内存空间不够用时,临时使用磁盘空间充当内存来使用 速度慢 解决OOM问题 内存溢出。
			    # linux内存如果达到最大限制,则自动杀死占用最高内存的进程来让系统正常运行
				# swap 对用户的服务器需要增加物理内存
		        # 比较着急,或者公司内部测试服务器 自己使用的。
/       剩余空间

第三种分区: 企业
/boot  200M
swap   2G
/      50G    # 系统
/data  1.8T   # 数据分区

2.磁盘分区格式
MBR格式 小于2T的磁盘使用fdisk分区
GPT格式 大于2T的磁盘使用parted分区

vmare 磁盘分区

#在虚拟机新添加一块磁盘 fdisk 查看刚添加的硬盘nvme0n2: 20 GiB
[root@localhost ~]# fdisk -l

#目前虚拟机有两块 1块50G 2个分区
Disco /dev/nvme0n1: 50 GiB, 53687091200 bytes, 104857600 sectores
Disposit.      Inicio Comienzo     Final  Sectores Tamaño Id Tipo
/dev/nvme0n1p1 *          2048   2099199   2097152     1G 83 Linux
/dev/nvme0n1p2         2099200 104857599 102758400    49G 8e Linux LVM

#新添加的 1块硬盘 20G
Disco /dev/nvme0n2: 20 GiB, 21474836480 bytes, 41943040 sectores

#fdisk命令帮助
   d   delete a partition		  # 删除一个分区  
   l   list known partition types # 显示分区类型
   n   add a new partition		  # 创建新的分区
   p   print the partition table  # 输出分好的分区表
   m   print this menu		      # 打印菜单
   w   write table to disk and exit #保存并且推出
   q   quit without saving changes	# 退出不保存
   
   
#对nvme0n2: 20 GiB 硬盘分区
[root@localhost ~]# fdisk /dev/nvme0n2

Welcome to fdisk (util-linux 2.35.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x1d7843e7.

# 输入n新建分区 primary主分区,只能4个,第4个为扩展分区 在扩展分区 新建逻辑分区
Command (m for help): n
Partition type
   p   primary (2 primary, 0 extended, 2 free)
   e   extended (container for logical partitions)
Select (default p): p #选择主分区
Partition number (3,4, default 3): 
First sector (20973568-41943039, default 20973568): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (20973568-41943039, default 41943039): +2G #给分区设置多少G容量

Created a new partition 3 of type 'Linux' and of size 2 GiB.

Command (m for help): p #打印已经分割的分区
Disk /dev/nvme0n2: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual NVMe Disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x1d7843e7

#共分3块主分区,1个扩展分区 下两个逻辑分区

Command (m for help): p
Disk /dev/nvme0n2: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual NVMe Disk

Device         Boot    Start      End  Sectors Size Id Type
/dev/nvme0n2p1          2048 10487807 10485760   5G 83 Linux
/dev/nvme0n2p2      10487808 20973567 10485760   5G 83 Linux
/dev/nvme0n2p3      20973568 25167871  4194304   2G 83 Linux
/dev/nvme0n2p4      25167872 41943039 16775168   8G  5 Extended
/dev/nvme0n2p5      25169920 33558527  8388608   4G 83 Linux
/dev/nvme0n2p6      33560576 41943039  8382464   4G 83 Linux

3.查看系统中的分区并格式化
[root@localhost ~]# ll /dev/nvme*
crw------- 1 root root 242,  0 Nov 21 09:07 /dev/nvme0
brw-rw---- 1 root disk 259,  0 Nov 21 09:07 /dev/nvme0n1
brw-rw---- 1 root disk 259,  1 Nov 21 09:07 /dev/nvme0n1p1
brw-rw---- 1 root disk 259,  2 Nov 21 09:07 /dev/nvme0n1p2
brw-rw---- 1 root disk 259,  3 Nov 21 11:12 /dev/nvme0n2
brw-rw---- 1 root disk 259, 10 Nov 21 11:12 /dev/nvme0n2p1
brw-rw---- 1 root disk 259, 11 Nov 21 11:12 /dev/nvme0n2p2
brw-rw---- 1 root disk 259, 12 Nov 21 11:12 /dev/nvme0n2p3
brw-rw---- 1 root disk 259, 13 Nov 21 11:12 /dev/nvme0n2p4
brw-rw---- 1 root disk 259, 14 Nov 21 11:12 /dev/nvme0n2p5
brw-rw---- 1 root disk 259, 15 Nov 21 11:12 /dev/nvme0n2p6

#使用mkfs.xfs 格式化分区
[root@localhost ~]# mkfs.xfs /dev/nvme0n2p1

4.创建挂载点 并挂载/dev/nvme0n2p1
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/nvme0n2p1 /data/

#df -h 查看 已成功挂载
[root@localhost ~]# df -h
Filesystem             Size  Used Avail Use% Mounted on
/dev/nvme0n2p1         5.0G   68M  5.0G   2% /data

#测试使用
[root@localhost ~]# cat /data/hello.txt 
hello

#卸载挂载
[root@localhost ~]# umount /data

5.开机自动挂载
[root@localhost ~]# vi /etc/rc.d/rc.local 
[root@localhost ~]# vi /etc/fstab 

[root@localhost ~]# tail -1 /etc/fstab 
/dev/nvme0n2p1          /data                   xfs     deafaults       0 0

6.2 Linux磁盘分区parted

# 基于麒麟系统 vmare scsi硬盘 新插入一块4T硬盘 parted分区至少是2T以上
# fdisk -l 查看新加入的硬盘
[root@kylin-sp3v10 ~]# fdisk -l
##Linux系统
Disk /dev/sda: 50 GiB, 53687091200 bytes, 104857600 sectors
Device     Boot   Start       End   Sectors Size Id Type
/dev/sda1  *       2048   2099199   2097152   1G 83 Linux
/dev/sda2       2099200 104857599 102758400  49G 8e Linux LVM

1.加入4T硬盘
#新加入的4T硬盘
Disk /dev/sdb: 3.91 TiB, 4294967296000 bytes, 8388608000 sectors

#parted相关命令
help [COMMAND] 
  mklabel,mktable LABEL-TYPE               # 创建分区表类型
  mkpart PART-TYPE [FS-TYPE] START END     # 创建分区 
  print 								   # 打印分区	
  quit                                     # 退出即保存
  rm NUMBER                                # 删除分区
 
 2.使用parted分区 格式化
 #对4T硬盘分区
[root@kylin-sp3v10 ~]# parted /dev/sdb

(parted) mklabel gpt  #将修改磁盘分区表类型为gpt模式(默认为msdos格式,最大支持2T)

#查看
(parted) print                                                            
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 4295GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

#创建分区
parted) mkpart
Partition name?  []? primary              #分区为主分区                                
File system type?  [ext2]? xfs            #文件系统为xfs                                 
Start? 0                                  #分区大小的起始   (开始1% 结尾30%)                             
End? 500G                                 #分区大小的结束 (单位K,M,G,T)                               
Warning: The resulting partition is not properly aligned for best performance: 34s % 2048s != 0s
Ignore/Cancel? I #默认不是从2048开始 是否忽略写入 是 按I                                                         

(parted) print                           #查看已创建的分区                                  
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 4295GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End    Size   File system  Name     Flags
 1      17.4kB  500GB  500GB  xfs          primary

#无交互式创建分区
(parted) mkpart primary xfs  500G 4295G   #一行写完         500G 100%                            

(parted) print                            #查看                                 
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 4295GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
 1      17.4kB  500GB   500GB   xfs          primary
 2      500GB   4295GB  3795GB  xfs          primary
 
 #删除分区
 Number  Start   End     Size    File system  Name     Flags
 1      17.4kB  500GB   500GB   xfs          primary
 2      500GB   4295GB  3795GB  xfs          primary

(parted) rm 1  #rm 加编号即可

(parted) print         #打印查看已删除primary 1                                                   
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 4295GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start  End     Size    File system  Name     Flags
 2      500GB  4295GB  3795GB  xfs          primary


#新建分区 从0% 500G
(parted) mkpart primary xfs 0% 500G
(parted) print                                                            
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 4295GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  500GB   500GB   xfs          primary
 2      500GB   4295GB  3795GB  xfs          primary

#quit(创建分区即生效,已经写入系统)


3.格式化分区
[root@kylin-sp3v10 ~]# mkfs.xfs -f /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=30517568 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=122070272, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=59604, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

4.挂载使用
[root@kylin-sp3v10 ~]# mount /dev/sdb1 /data/

5.永久挂载 写入/etc/fstab
[root@kylin-sp3v10 ~]# vi /etc/fstab
/dev/sdb1              /data                    xfs     defaults        0 0

6.reboot 并查看
[root@kylin-sp3v10 ~]# df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               451M     0  451M   0% /dev
tmpfs                  467M     0  467M   0% /dev/shm
tmpfs                  467M  6.8M  460M   2% /run
tmpfs                  467M     0  467M   0% /sys/fs/cgroup
/dev/mapper/klas-root   47G  3.8G   44G   8% /
tmpfs                  467M     0  467M   0% /tmp
/dev/sdb1              466G  3.3G  463G   1% /data

9.ext3、ext4、xfs对比

特性 ext3 ext4 xfs
日志功能 支持 支持 支持
最大文件尺寸 2TB 1EB 8EB
最大文件系统尺寸 32TB 1EB 8EB
性能
适用场景 通用 通用,尤其优化了大文件处理 大数据量处理,数据库应用
特殊功能 文件系统压缩 Extents, 持久预分配 并行I/O, 实时碎片整理

10.磁盘相关案例

10.1 服务占大量内存,临时创建交换分区,来充当内存使用

swap磁盘分区: 大小是内存的1-1.5倍 如果内存大于8G,则最多swap给8G即可。
什么情况下使用swap: 
       测试服务器 
       内部服务器 
       自己用的虚拟机 
       流量波动的业务
线上服务器,业务服务器禁止使用swap,增加内存的方式解决OOM问题。OOM(内存溢出)
创建swap分区的方式:
方法1: 安装操作系统的时候
方法2: 安装完成操作系统
# 测试服务器上测试软件内存不够用,也无法添加内存,为了正常让测试业务正常运行,临时创建swap分区。
第一步: 生成一个1G的设备文件。
[root@kylin-sp3v10 ~]# dd if=/dev/zero of=/opt/1g bs=1M count=1000
第二步: 格式化成swap类型  # 磁盘是使用 mkfs.xfs /dev/sdb1
[root@kylin-sp3v10 ~]# mkswap /opt/1g 
mkswap: /opt/1g: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 1000 MiB (1048571904 bytes)
no label, UUID=0f956b74-3121-4949-9d98-11ecea5b08c5
第三步: 挂载使用swap 直接增加到原有的swap空间上。

#查看原有 是2G
[root@kylin-sp3v10 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:          932Mi       215Mi        71Mi       1.0Mi       645Mi       571Mi
Swap:         2.0Gi       6.0Mi       2.0Gi

#swapon 再增加1G
[root@kylin-sp3v10 ~]# swapon /opt/1g
swapon: /opt/1g: insecure permissions 0644, 0600 suggested.
[root@kylin-sp3v10 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:          932Mi       215Mi        69Mi       1.0Mi       646Mi       570Mi
Swap:         3.0Gi       6.0Mi       3.0Gi

#查看swap分区的组成
[root@kylin-sp3v10 ~]# swapon -s
Filename				Type		Size	Used	Priority
/dev/dm-1                              	partition	2138108	6412	-2
/opt/1g                                	file    	1023996	0	-3

第四步: 写入开机自动挂载
vi /etc/fstab
/opt/1g swap /opt/1g defaults 0 0

10.2 查找磁盘中的大文件

#第一种情况:磁盘空间满
find / -type f -size +1G

#第二种情况: inode号满
find / -type d -size +1M      #目录大于1M,可以目录下有上万个小文件(3-5w) 大量占用inode

10.3 解决磁盘不够用的问题

#购买新的硬盘,分区,格式化,挂载使用,做软连接,日志的路径不能变,解决磁盘不够用的问题

#现日志文件超过1T,把现有日志文件,mv到/data目录下, data是4T硬盘,然后做软连接 ln -s /var/log/logs /data 
#创建日志
[root@kylin-sp3v10 ~]# dd if=/dev/zero of=/var/log/1g.log bs=1M count=1000
#把原有日志文件 移动到4T硬盘中
[root@kylin-sp3v10 ~]# mv /var/log/1g.log /data/
#做软连接 原有日志文件映射到4T硬盘中的日志文件
[root@kylin-sp3v10 ~]# ln -s /data/1g.log /var/log/1g.log
#查看
[root@kylin-sp3v10 ~]# ll /var/log/1g.log /data/1g.log 
-rw-r--r-- 1 root root 1048576000 Nov 24 14:17 /data/1g.log
lrwxrwxrwx 1 root root         12 Nov 24 14:19 /var/log/1g.log -> /data/1g.log
[root@kylin-sp3v10 ~]# 

10.4 删除文件文件后发现磁盘空间还没释放

磁盘上有个一39G的文件,删除后发现磁盘没有释放。
文件如果被进程所占用,会出现删除文件磁盘没有释放的问题。
查看当前的文件被哪个进程所占用:
#进程占用
[root@kylin-sp3v10 ~]# tail -f /var/log/1g.log
#删除之后磁盘空间并未释放
#使用lsof 查找
[root@kylin-sp3v10 ~]# lsof |grep 1g
tail      4428                          root    3r      REG              253,0 1048576000   69099039 /var/log/1g.log (deleted)
#kill 4428 结束进程即可
posted @ 2024-11-24 14:59  被时光移动的城市  阅读(13)  评论(0编辑  收藏  举报