首页 > 技术文章 > Linux-磁盘管理

zhangzk2021 2021-07-23 10:15 原文

1.磁盘的工作原理:

每个硬盘中心都是一摞高速运转的圆盘,在圆盘上附着的一圈金属颗粒,每个金属颗粒都有自己的磁化程度,用于储存0和1;

当记录数据时,硬盘的磁头开始通电,形成强磁场,数据在磁场的作用下转变成电流,使颗粒磁化,从而将信息记录在圆盘上;

由海量颗粒组成的信息,就是我们存在硬盘里的数据;

1.1 磁盘构成:

盘片:每个盘片可以有两面,即第一个盘片的正面为0面,反面为1面然后依次类推。

磁道:每个盘片的盘面在出厂的时候被划分出了多个同心圆环,数据就存储在这样的同心圆环上面,称为磁道Track。

扇区:其实就是再每个磁道划分为若干个弧段,每个弧段就是一个扇区Sector,扇区是硬盘上存储的物理单位,每个扇区存储512字节。

柱面:简单来说就是处于同一个垂直区域的磁道称为柱面 ,即各盘面上面相同位置磁道的集合。

磁头:读取磁盘磁道上面金属块,主要负责读或写入数据。

1.2 接口类型:

 

 

 

 

 

 

 

 

2.磁盘命名:

磁盘在系统上面的命名方式;

设备名称 分区信息 设备类型
/dev/sda /dev/sda1 第一块物理磁盘第一分区

 

 

 

阿里云主机或者KVM虚拟化主机的磁盘命名格式;

设备名称 分区信息 设备类型
/dev/vda /dev/vda1 第一块虚拟磁盘的第一个分区

 

 

 

 

3.分区管理:

3.1 分区

#1 意义:分区是为了便于数据分门别类的存储;

#2 分区表:记录分区的编号,每个编号从哪个扇区开始,从哪个扇区结束;

#3 方式:MBR、GPT

分区表:记录分区的编号,每个编号从哪个扇区开始,从哪个扇区结束;

GPT:新型的分区表,GPT支持分配128个主分区;

MBR:主引导记录,用来找到磁盘上的操作系统,并且引导启动(磁道0 扇区1 512字节);最多支持4个主分区;

PS:注意MBR与GPT之间不能互转,会导致数据丢失!

 

3.2 fdisk分区工具

#1 fdisk =仅支持分配小于2TB的磁盘(MBR),fdisk -l =查看当前设备;

#2 fdisk /dev/sdb =对设备分区,m =列出常用命令,显示帮助;

[root@xuliangwei ~]# fdisk -l
[root@xuliangwei ~]# 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 partitions 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)   #拓展功能

 

# fdisk创建主分区;

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

# fdisk创建扩展分区;

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): #空间都给到扩展分区

# fdisk创建逻辑分区;

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分区方式
[root@xuliangwei ~]# fdisk /dev/sdb -l|grep type
Disk label type: dos

#安装parted, 刷新内核立即生效,无需重启
[root@xuliangwei ~]# yum -y install parted
[root@xuliangwei ~]# partprobe /dev/sdb

 

3.3 gdisk分区工具

#1 gdisk支持分配大于2TB的磁盘,gdisk -l =查看当前设备;

#2 gdisk /dev/sdb =对设备进行分区;

#1.安装gdisk分区工具
[root@xuliangwei ~]# yum install gdisk -y

#2.创建一个新分区,500MB大小
[root@xuliangwei ~]# 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. #3.创建完成后,可以尝试检查磁盘是否为gpt格式 [root@xuliangwei-node1 /]# fdisk /dev/sdb -l|grep type Disk label type: gpt #4.安装parted, 刷新内核立即生效,无需重启 [root@xuliangwei ~]# yum -y install parted [root@xuliangwei ~]# partprobe /dev/sdb

 

3.4 mkfs格式化系统

#1 mkfs 命令用于格式化硬盘,类似于将房子装修成2室1厅;

PS:1.可以针对整块磁盘,或者单个分区; 2.建议不要直接格式化整个磁盘,分区后再格式化,头部有预留空间;

#2 -b:设定数据区块占用空间大小,默认是4096bytes每个块;
   -t:指定某种类型的文件系统,ext4或xfs;

   -f:强制覆盖;

格式化磁盘:mkfs.xfs/ext4 /dev/sdb

格式化某个分区:mkfs.xfs /dev/sdb1

指定一个数据块大小:mkfs.xfs -b size=1024  /dev/sdb2

 

 

4.挂载管理:

当需要使用磁盘空间的时,需要准备一个目录作为挂载点,然后使用mount命令与该设备进行关联;

PS: 类似我的商场没有门,那么就无法进入购买商品,此时通过mount命令可以创建一个入口,给超市安装一个门;

4.1 临时挂载

mount -t xfs -o ro /dev/sdb1 /db1    #mount挂载,重启会失效;#设置参数仅为可读,不能在/db1中touoch文件;

-t:指定文件系统挂载分区;

-a:检查并且挂载/etc/fstab配置文件中未挂载的设备;

-o:指定挂载参数,ro、rw;

4.2 临时卸载

umount /db1   #卸载目录;

umount /dev/sdb1   #卸载设备;

umount -l /db1   #切换至其他目录,强行卸载;

4.3 永久挂载

永久挂载,需要将挂载相关信息写入/etc/fstab 配置文件中实现;

永久挂载操作流程

#1 获取设备名称或UUID;
#2 手动临时挂载测试;
#3 写入/etc/fstab配置文件;

# 手动编写
[root@oldxu ~]# tail -1 /etc/fstab  
UUID=e271b5b2-b1ba-4b18-bde5-66e394fb02d9
/db1 xfs defaults 0  0
# 自动实现 [root@oldxu ~]# blkid |grep /dev/sda1 | awk -F '[: ]+' '{print $2}' | sed -r 's#(.*)#\1 /db1 xfs defaults 0 0#g' >> /etc/fstab

#4 加载/etc/fstab 配置文件, 同时检测是否存在语法错误;

 

 

4.4 /etc/fstab 配置文件格式

第一列 第二列 第三列 第四列 第五列 第六列
设备名/UUID 挂载点(入口) 文件系统类型 挂载参数 是否备份 是否检查
/dev/sdb1 /db1 xfs defaults 0 0

 

 

 

4=挂载参数: 说明
async/sync 使用同步或异步方式存储数据;默认async
user/nouser 是否允许普通用户使用mount命令挂载;默认 nouser
exec/noexe 是否允许可执行文件执行;默认exec
auto/noauto 执行  mount -a 命令时,此文件系统是否被主动挂载;默认 auto
rw/ro 是否以只读或者读写模式进行挂载;默认rw
defaults 具有rw,suid,dev,exec,auto,nouser,async 等参数

  

 

 

 

 

 

 

 

 

5 虚拟磁盘swap

模拟物理内存:Swap分区在系统的物理内存不够时,将硬盘中的一部分空间供当前运行的程序使用;

#1 mkswap /dev/sdb1   =格式化分区为swap;

#2 swapon/swapoff  /dev/sdb1   =添加或关闭swap分区,加-a选项,表示所有;

 

 

6 文件系统

#1 为了简化磁盘使用的过程,操作系统提供了一个辅助系统 FS(文件系统);

#2 Windows:FAT32、NTFS   Linux:EXT2、EXT3、EXT4、XFS、VFAT、NTFS-3g

#3 文件系统结构:磁盘被划分为两大存储区域,元数据inode、真实数据data block;存储文件时,至少占用一个inode 、与一个 block;

#4 快速定位磁盘上哪些block可用,哪些不可用;

inode bitmap=inde位图   block bitmap=block位图  

 

PS:每个分区的inode(节点编号)都是由本分区自己制定的

#5 删除原理:

1. 首先删除目录下的文件名称;

2. 然后将 inode、block 的 bitmap 状态修改为可用状态,但文件并没有真正的被删除,还有恢复的可能性;

3. 新数据写入,将其覆盖,数据才算真正的删除;

#6 文件移动原理:

相同分区:文件名称从一个目录移动到另一个目录下面,数据位置没有改变,创建新的文件名对应新的目录项,删除旧目录对应的文件名,并不会修改其 inode 和 block ;

不同分区:跨分区移动,相当于cp+rm,inode和block都会改变;

1. 目标分区分配inode,并且在inode中生成新条目;

2. 在目录中创建一个目录项,将名称与inode关联;

3. 拷贝数据,生成i新文件;

4. 释放旧文件中的inode和block;

5. 删除旧目录对应的文件名;

#7 xfs_repair /dev/sdc1   =修复文件系统

   xfs_repair -L /dev/sdc1   =强制修复可能造成数据丢失

#8 查看磁盘分区常用的几个命令

blkid   =查看分区类型,可以查看块设备(包括交换分区)的文件系统类型、LABEL、UUID、挂载目录等信息;

lsblk   =列出所有的块设备;

-f 显示文件系统信息

-s 显示指定标签信息 (LABEL、UUID、TYPE)

 

df   =列出文件系统上可用磁盘空间的数量,没有指定,则显示当前所有使用中的文件系统;

-i 用信息索引点代替块表示使用状况

-h 用常见的格式显示出大小

-T 输出每个文件系统的类型

 

 

 

 

推荐阅读