您的位置:首页 > 运维架构 > Linux

1.Linux 磁盘、文件系统管理---磁盘管理及分区

2016-08-28 16:44 579 查看
Linux 磁盘、文件系统管理==============================================================================概述:磁盘结构
分区类型
管理分区
管理文件系统
挂载设备
管理虚拟内存
==============================================================================

第一篇:Linux磁盘管理

1.概述:★计算机的组成计算机的五大组成部件:输入设备、输出设备、存储器、运算器、控制器,其中,输入、输出设备称之为I/O设备,运算器和控制器称之为CPU ,存储器如内存、硬盘等。计算机只有CPU和内存其实就可以独立完成计算任务了,只是其输入输出都在内存中实现,但是,内存属于随机存储单元,断点就会导致数据丢失,因此,我们就通过其他辅助设备来弥补内存的不足,这些辅助设备称之为外存,如:磁盘,光驱等。
2.硬盘:★接口类型:



★硬盘分类:固态硬盘
机械硬盘
★硬盘存储术语(CHS):head:磁头 256个 ;
track:磁道 1024个磁道;
平均寻道时间:5400rpm(转/分),7200rpm,10000rpm,15000rpm;
cylinder:柱面 (分区划分基于柱面);
secotr:扇区,512bytes 63个;
cylinder=512*63track*256head=8M

附图:



3.设备文件:★设备文件对Linux而言,其哲学思想之一就是“一切皆文件”,因此 linux 之上所有设备的操作都是通过文件接口来实现的,也就是说在访问设备的时候就如同访问一个文件一样,因此他们使用的都是文件系统接口。

[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]☉[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]一切皆文件
open(), read(), write(), close()
[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]☉[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]设备类型:块设备(block):随机访问,数据交换单位是“块”;
字符设备(character):线性访问,数据交换单位是“字符”;
[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]☉[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]设备文件:FHS /dev关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信;
[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]☉[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]设备号:major:主设备号,区分设备类型;用于标明设备所需要的驱动程序;
minor:次设备号,区分同种类型下的不同设备;是特定设备的访问入口;
附图:


[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]☉[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]mknod命令:创建设备文件作用:make block or character speclal files
语法:mknod [OPTION]... NAME TYPE [MAJOR MINOR]
选项:-m MODE:创建后的设备文件的访问权限;



4.设备文件名:★设备文件名:(ICANN:互联网名称地址分配机构定义)[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]☉[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]磁盘:IDE:/dev/hd[a-z] 例如:/dev/hda,/dev/hdb;
SCSI,SATA,USB,SAS:不同设备:/dev/sd[a-z]
[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]☉[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]分区:同一设备上的不同分区:1,2...
/dev/sda#: 如:/dev/sda1...
CentOS 6和7统统将硬盘设备文件表示为:/dev/sd[a-z]#
[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]☉[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]引用设备的方式:设备文件名;
卷标(label);
UUID(全局唯一标识符,uuidgen 命令可以生成uuid);



注意:引用设备的时候,最好用UUID,因为设备文件名可能会改变。

磁盘分区:MBR、GPT

1.MBR分区:★MBR:0 sector (0磁道0扇区)在磁盘上有一个叫做0磁道0扇区是被预留出来的,他不属于任何分区,这个扇区称之为MBR,严格意义上讲应该叫做用来存储MBR的一段空间;
MBR:即 Master Boot Record 主引导记录,MBR又分为三部分

[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]☉[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]如何分区:按柱面
[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]☉[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]0磁道0扇区:扇区大小为512bytes,分为三部分:
◆446bytes:bootloader,程序,引用启动操作系统程序;◆64bytes:分区表,每16bytes标识一个分区,一共只能有4个分区;一块磁盘要么最多划分4个分区,要么划分成3个主分区+1个扩展分区(N个逻辑分区)

4个主分区:3主分区+1扩展(N个逻辑分区);
◆2bytes:MBR区域的有效标识;一般55AA为有效;


[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]☉[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]4个主分区;3主分区+1扩展(N个逻辑分区);主分区和扩展分区的标识:1-4;
逻辑分区只能从5开始(5+)
附图:

[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]☉[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]命令:echo "- - -" > /sys/class/scsi_host/host2/scan 新增添磁盘,还不能直接显示出来,要想出现要对磁盘进行扫描(实际生产环境中不需要,都是热插拔技术):
假如 fdisk -l 还是未发现新硬盘,则将上面命令中的host0,替换为host1,host2,....看看;
我们再查看系统日志/var/log/messages,发现对SCSI设备进行了一次重新扫描,用fdisk -l也看到了新增加的磁盘了。上面的命令主要的目的就是scan the SCSI bus
2.GBT分区:★GPT分区UID(Globals Unique Identifiers)partition table ;
支持128个分区,使用64位,支持8Z(512Byte/block )64Z (4096Byte/block);
使用128位UUID 表示磁盘和分区GPT分区表自动备份在头和尾两份,并有CRC校验位;
UEFI (统一扩展固件接口)硬件支持GPT,使操作系统启动

磁盘管理

1.工具:★管理磁盘[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]☉[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]列出块设备:lsblk[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]☉[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]创建分区使用:fdisk:创建MBR分区,也支持GPT,对于一块硬盘,最多只能管理15分区;
gdisk:创建GPT分区;
GNU parted:高级分区操作(创建、复制、调整大小等等);
[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]☉[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]partprobe重新设置内存中的内核分区表版本

2.fdisk命令:★fdisk:[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]☉[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]查看磁盘的分区信息:fdisk -l [-u] [device...];列出指定磁盘上的分区情况



★管理分区:fdisk devicefdisk提供了一个交互式接口来管理分区,他有许多命令,分别用于不同的管理功能;所有的操作均在内存中完成,没有直接同步到磁盘;直接使用w命令保存至磁盘上;



[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]☉[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]常用命令:n:创建新分区;;
d:删除已有分区;(如果删除扩展分区sda4 逻辑分区都会消失);
t:修改分区类型;
l:查看所有支持的已知ID;
w:保存并退出;
q:不保存并退出;
m:查看帮助信息;
p:显示现有分区表
注意:在已经分区并且已经挂载其中某个分区的磁盘设备上创建的新分区,内核可能在创建完成后无法直接识别;


[b]3.同步分区表:[/b]★同步分区表:partx,partprobe[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]☉[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]查看内核是否已经识别新的分区:# cat /proc/partations
lsblk
[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]☉[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]通知内核重新读取硬盘分区表
新增分区用:partx -a /dev/device;
kpartx -af /dev/device
删除分区用:partx -d --nr N /dev/DEVICE (N:表示删除的哪个分区就写几,N-M表示范围)
centos6:--nr N-M(表示范围)
[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]☉[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]partprobe命令:centos5,7使用。一条命令搞定,增减删除都可以!
用法:partprobe [/dev/DEVICE]
演示: 1.fdisk -l [device] 列出所有的磁盘分区
# 列出所有设备的磁盘分区
[root@centos7 ~]#  fdisk -l

磁盘 /dev/sda:85.9 GB, 85899345920 字节,167772160 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0007c37e

设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1001471      499712   83  Linux
/dev/sda2         1001472    84887551    41943040   83  Linux
/dev/sda3        84887552   126830591    20971520   83  Linux
/dev/sda4       126830592   167772159    20470784    5  Extended
/dev/sda5       126834688   131031039     2098176   82  Linux swap / Solaris

# 列出指定设备的磁盘分区
[root@centos7 ~]#  fdisk -l /dev/sda

磁盘 /dev/sda:85.9 GB, 85899345920 字节,167772160 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0007c37e

设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1001471      499712   83  Linux
/dev/sda2         1001472    84887551    41943040   83  Linux
/dev/sda3        84887552   126830591    20971520   83  Linux
/dev/sda4       126830592   167772159    20470784    5  Extended
/dev/sda5       126834688   131031039     2098176   82  Linux swap / Solaris
2.查看所有以支持分区的ID类型

3.创建磁盘分区:
[root@centos7 ~]# fdisk /dev/sda
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

命令(输入 m 获取帮助):p

磁盘 /dev/sda:85.9 GB, 85899345920 字节,167772160 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0007c37e

设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1001471      499712   83  Linux
/dev/sda2         1001472    84887551    41943040   83  Linux
/dev/sda3        84887552   126830591    20971520   83  Linux
/dev/sda4       126830592   167772159    20470784    5  Extended
/dev/sda5       126834688   131031039     2098176   82  Linux swap / Solaris

命令(输入 m 获取帮助):n # 创建新分区
All primary partitions are in use
添加逻辑分区 6

起始 扇区 (126832640-167772159,默认为 126832640):
将使用默认值 126832640
Last 扇区, +扇区 or +size{K,M,G} (126832640-126834687,默认为 126834687):+2G
值超出范围。
Last 扇区, +扇区 or +size{K,M,G} (126832640-126834687,默认为 126834687):
将使用默认值 126834687
分区 6 已设置为 Linux 类型,大小设为 1 MiB  # 使用默认值

命令(输入 m 获取帮助):p  # 打印当前磁盘分区

磁盘 /dev/sda:85.9 GB, 85899345920 字节,167772160 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0007c37e

设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1001471      499712   83  Linux
/dev/sda2         1001472    84887551    41943040   83  Linux
/dev/sda3        84887552   126830591    20971520   83  Linux
/dev/sda4       126830592   167772159    20470784    5  Extended
/dev/sda5       126834688   131031039     2098176   82  Linux swap / Solaris
/dev/sda6       126832640   126834687        1024   83  Linux

Partition table entries are not in disk order

命令(输入 m 获取帮助):d   # 删除指定分区
分区号 (1-6,默认 6):6
分区 6 已删除

命令(输入 m 获取帮助):n   # 创建新分区
All primary partitions are in use
添加逻辑分区 6
起始 扇区 (126832640-167772159,默认为 126832640):131031042
Sector 131031042 is already allocated
起始 扇区 (131033088-167772159,默认为 131033088):131031400
值超出范围。
起始 扇区 (131033088-167772159,默认为 131033088):131032000
值超出范围。
起始 扇区 (131033088-167772159,默认为 131033088):132000000   # 上面总是提示超出范围,这里可以选择一个离前一个结束扇区大的值
Last 扇区, +扇区 or +size{K,M,G} (132000000-167772159,默认为 167772159):+5G  # 创建新分区为+5G
分区 6 已设置为 Linux 类型,大小设为 5 GiB

命令(输入 m 获取帮助):p

磁盘 /dev/sda:85.9 GB, 85899345920 字节,167772160 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0007c37e

设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1001471      499712   83  Linux
/dev/sda2         1001472    84887551    41943040   83  Linux
/dev/sda3        84887552   126830591    20971520   83  Linux
/dev/sda4       126830592   167772159    20470784    5  Extended
/dev/sda5       126834688   131031039     2098176   82  Linux swap / Solaris
/dev/sda6       132000000   142485503     5242752   83  Linux  # 新创建的分区

命令(输入 m 获取帮助):w   # 保存分区,但是有报警,这里说明内核并没有真正识别分区
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
正在同步磁盘。
4.同步分区表
# 在fdisk 命令下可以显示出新创建的分区,但有没有真正识别要看内核
[root@centos7 ~]# fdisk -l

磁盘 /dev/sda:85.9 GB, 85899345920 字节,167772160 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0007c37e

设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1001471      499712   83  Linux
/dev/sda2         1001472    84887551    41943040   83  Linux
/dev/sda3        84887552   126830591    20971520   83  Linux
/dev/sda4       126830592   167772159    20470784    5  Extended
/dev/sda5       126834688   131031039     2098176   82  Linux swap / Solaris
/dev/sda6       132000000   142485503     5242752   83  Linux

# 保存了内核所识别的所有分区,可以看出新创建的分区 sda6 并没有真正被内核识别
[root@centos7 ~]# cat /proc/partitions
major minor  #blocks  name

8        0   83886080 sda
8        1     499712 sda1
8        2   41943040 sda2
8        3   20971520 sda3
8        4          1 sda4
8        5    2098176 sda5
11        0    7587840 sr0

# lsblk 命令显示块设备,也可以查看
[root@centos7 ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   80G  0 disk
├─sda1   8:1    0  488M  0 part /boot
├─sda2   8:2    0   40G  0 part /
├─sda3   8:3    0   20G  0 part /usr
├─sda4   8:4    0    1K  0 part
└─sda5   8:5    0    2G  0 part [SWAP]
sr0     11:0    1  7.2G  0 rom

#------------------------------------------------------------------------------
# 使用 partx 命令通知内核重读分区表,有的时候一次不行,再通知第二次
[root@centos7 ~]# partx -a /dev/sda
partx: /dev/sda: error adding partitions 1-5
[root@centos7 ~]# partx -a /dev/sda
partx: /dev/sda: error adding partitions 1-6   # centos7 使用 partprobe /dev/sda 一条命令搞定

[root@centos7 ~]# cat /proc/partitions
major minor  #blocks  name

8        0   83886080 sda
8        1     499712 sda1
8        2   41943040 sda2
8        3   20971520 sda3
8        4          1 sda4
8        5    2098176 sda5
8        6    5242752 sda6   # 确定新分区出现,才可以做后续的操作,如创建文件系统
11        0    7587840 sr0
[root@centos7 ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   80G  0 disk
├─sda1   8:1    0  488M  0 part /boot
├─sda2   8:2    0   40G  0 part /
├─sda3   8:3    0   20G  0 part /usr
├─sda4   8:4    0    1K  0 part
├─sda5   8:5    0    2G  0 part [SWAP]
└─sda6   8:6    0    5G  0 part
sr0     11:0    1  7.2G  0 rom

# 删除分区,通知内核重读分区表
[root@centos7 ~]# cat /proc/partitions
major minor  #blocks  name

8        0   83886080 sda
8        1     499712 sda1
8        2   41943040 sda2
8        3   20971520 sda3
8        4          1 sda4
8        5    2098176 sda5
8        6    5242752 sda6
11        0    7587840 sr0
[root@centos7 ~]# partprobe /dev/sda   # 或者使用  partx -d --nr 6 /dev/sda
[root@centos7 ~]# cat /proc/partitions
major minor  #blocks  name

8        0   83886080 sda
8        1     499712 sda1
8        2   41943040 sda2
8        3   20971520 sda3
8        4          1 sda4
8        5    2098176 sda5
11        0    7587840 sr0
[root@centos7 ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   80G  0 disk
├─sda1   8:1    0  488M  0 part /boot
├─sda2   8:2    0   40G  0 part /
├─sda3   8:3    0   20G  0 part /usr
├─sda4   8:4    0    1K  0 part
└─sda5   8:5    0    2G  0 part [SWAP]
sr0     11:0    1  7.2G  0 rom
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux mkfs blkid