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 之上所有设备的操作都是通过文件接口来实现的,也就是说在访问设备的时候就如同访问一个文件一样,因此他们使用的都是文件系统接口。
☉一切皆文件
open(), read(), write(), close()
☉设备类型:
块设备(block):随机访问,数据交换单位是“块”;
字符设备(character):线性访问,数据交换单位是“字符”;
☉设备文件:FHS
/dev
关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信;
☉设备号:
major:主设备号,区分设备类型;用于标明设备所需要的驱动程序;
minor:次设备号,区分同种类型下的不同设备;是特定设备的访问入口;
附图:
☉mknod命令:创建设备文件
作用:make block or character speclal files
语法:mknod [OPTION]... NAME TYPE [MAJOR MINOR]
选项:-m MODE:创建后的设备文件的访问权限;
4.设备文件名:
★设备文件名:(ICANN:互联网名称地址分配机构定义)
☉磁盘:
IDE:/dev/hd[a-z] 例如:/dev/hda,/dev/hdb;
SCSI,SATA,USB,SAS:不同设备:/dev/sd[a-z]
☉分区:
同一设备上的不同分区:1,2...
/dev/sda#: 如:/dev/sda1...
CentOS 6和7统统将硬盘设备文件表示为:/dev/sd[a-z]#
☉引用设备的方式:
设备文件名;
卷标(label);
UUID(全局唯一标识符,uuidgen 命令可以生成uuid);
注意:
引用设备的时候,最好用UUID,因为设备文件名可能会改变。
磁盘分区:MBR、GPT
1.MBR分区:
★MBR:0 sector (0磁道0扇区)
在磁盘上有一个叫做0磁道0扇区是被预留出来的,他不属于任何分区,这个扇区称之为MBR,严格意义上讲应该叫做用来存储MBR的一段空间;
MBR:即 Master Boot Record 主引导记录,MBR又分为三部分
☉如何分区:
按柱面
☉0磁道0扇区:扇区大小为512bytes,分为三部分:
◆446bytes:bootloader,程序,引用启动操作系统程序;
◆64bytes:分区表,每16bytes标识一个分区,一共只能有4个分区;
一块磁盘要么最多划分4个分区,要么划分成3个主分区+1个扩展分区(N个逻辑分区)
4个主分区:3主分区+1扩展(N个逻辑分区);
◆2bytes:MBR区域的有效标识;一般55AA为有效;
☉4个主分区;3主分区+1扩展(N个逻辑分区);
主分区和扩展分区的标识:1-4;
逻辑分区只能从5开始(5+)
附图:
☉命令: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.工具:
★管理磁盘
☉列出块设备:lsblk
☉创建分区使用:
fdisk:创建MBR分区,也支持GPT,对于一块硬盘,最多只能管理15分区;
gdisk:创建GPT分区;
GNU parted:高级分区操作(创建、复制、调整大小等等);
☉partprobe
重新设置内存中的内核分区表版本
2.fdisk命令:
★fdisk:
☉查看磁盘的分区信息:
fdisk -l [-u] [device...];列出指定磁盘上的分区情况
★管理分区:fdisk device
fdisk提供了一个交互式接口来管理分区,他有许多命令,分别用于不同的管理功能;所有的操作均在内存中完成,没有直接同步到磁盘;直接使用w命令保存至磁盘上;
☉常用命令:
n:创建新分区;;
d:删除已有分区;(如果删除扩展分区sda4 逻辑分区都会消失);
t:修改分区类型;
l:查看所有支持的已知ID;
w:保存并退出;
q:不保存并退出;
m:查看帮助信息;
p:显示现有分区表
注意:
在已经分区并且已经挂载其中某个分区的磁盘设备上创建的新分区,内核可能在创建完成后无法直接识别;
3.同步分区表:
★同步分区表:partx,partprobe
☉查看内核是否已经识别新的分区:
# cat /proc/partations
lsblk
☉通知内核重新读取硬盘分区表
◆新增分区用:
partx -a /dev/device;
kpartx -af /dev/device
◆删除分区用:
partx -d --nr N /dev/DEVICE (N:表示删除的哪个分区就写几,N-M表示范围)
centos6:--nr N-M(表示范围)
☉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