Linux运维之道(13)——Linux磁盘管理

@(linux)[磁盘管理]


1. 写在前面

  • 在此强调一个Linux的核心机制就是一切皆文件
  • I/O Ports即I/O设备地址,用来标识硬件对应的设备地址,来让操作系统以及cpu使用。
  • CPU的核数不一定就是越多越好,由于CPU协调之间的协调问题,可能性能不升反降。

2. 设备文件

关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信

设备文件分类

  • 块设备:block,存取单位“块”,磁盘
  • 字符设备:char,存取单位“字符”,键盘

设备号码

  • 主设备号:major number, 标识设备类型
  • 次设备号:minor number, 标识同一类型下的不同设备
[root@localhost ~]# ll /dev/
total 0
# 10为主设备号标识相同的设备类型,175/235此设备标识不同的设备
crw-rw----. 1 root video    10, 175 3月  30 08:48 agpgart
crw-------. 1 root root     10, 235 3月  30 08:48 autofs
# 200标识这个单独的设备
drwxr-xr-x. 2 root root         200 3月  30 08:48 block

硬盘接口类型

接口速率而非硬件设备速率,同一个接口不同的硬盘速率不同

  • 并行(实现数据串行工作,类似双向两车道,但是之间有数据干扰)
  • IDE:133MB/s
  • SCSI:640MB/s
  • 串口(实现数据串行工作,类型单向四车道)
  • SATA3:6Gbps(需要除以8来得到实际速率)
  • SAS:6Gbps
  • USB:480MB/s
  • 单位(rpm): rotations per minute

磁盘设备的设备文件命名

命名格式:/dev/DEV_FILE

  • IDE: /dev/hd
  • SCSI, SATA, SAS, USB: /dev/sd
  • 不同设备:a-z
    /dev/sda, /dev/sdb, ...
  • 同一设备上的不同分区:1,2, ...
    /dev/sda1, /dev/sda5, ...

3. 机械式硬盘

机械硬盘主要由以下几部分组成:机械手臂(Boom),磁头(Head),转轴(Spindle)盘片(Platter)组成,在实际应用中又将盘片分成了磁道(Track)扇区(Sector)柱面(Cylinder)

磁盘结构
磁盘结构

机械手臂
机械手臂由控制电路控制,可以前后移动,在机械手臂的前端有磁头,机械手臂的作用就是,移动磁头,使磁头位于正确的位置上。

磁头
磁头由机械手臂控制在盘片上移动。读写硬盘时,磁头依靠磁盘的高速旋转引起的空气动力效应悬浮在盘面上,可以在极短的时间内精确定位到计算机指令指定的磁道上。

盘片
硬盘的存储介质,所有的信息都存储在这里,盘片分为单面盘片和双面盘片,单面盘片只能在一面进行存储,双面盘片能在两面进行存储。硬盘的盘片一般采用合金材料,多数为铝合金,盘面上涂着磁性材料。早期硬盘由于单碟容量低导致盘片较多,现代的硬盘盘片一般只有少数几片。硬盘一般会有一个或多个盘片,每个盘片可以有两个面(Side),即第1个盘片的正面称为0面,反面称为1面;第2个盘片的正面称为2面,反面称为3面…依次类推。每个盘面对应一个磁头(head)用于读写数据。第一个盘面的正面的磁头称为0磁头,背面称为1磁头;第二个盘片正面的磁头称为2磁头,背面称为3磁头,以此类推。盘面数和磁头数是相等的。

磁道
每个盘片的每个盘面被划分成多个狭窄的同心圆环,数据就是存储在这样的同心圆环上,我们将这样的圆环称为磁道(Track),每个盘面可以划分多个磁道。在每个盘面的最外圈,离盘心最远的地方是“0”磁道,向盘心方向依次增长为1磁道,2磁道,等等。硬盘数据的存放就是从最外圈开始。

扇区
根据硬盘规格的不同,磁道数可以从几百到成千上万不等。每个磁道上可以存储数KB的数据,但计算机并不需要一次读写这么多数据。在这一这基础上,又把每个磁道划分成若干弧段,每段称为一个扇区(Sector)。扇区是硬盘上存储的物理单位,每个扇区可存储128×2N次方(N=0,1,2,3)字节的数据。从DOS时代起,每扇区是128×22=512字节,现在已经成了业界不成文的规定,也没有哪个硬盘厂商试图去改变这种约定。也就是说即使计算机只需要硬盘上存储的某个字节,也须一次把这个字节所在的扇区中的全部512字节读入内存,再选择所需的那个字节。扇区的编号是从1开始,而不是0,这一点需要注意。另外,硬盘在划分扇区时,和软盘是有一定区别的。软盘的一个磁道中,扇区号一般依次编排,如1号,2号,3号…以此类推。

间隔跳跃编排

在硬盘磁道中,扇区号是按照某个间隔跳跃着编排。比如,2号扇区并不是1号扇区后的按顺序的第一个而是第八个,3号扇区又是2号扇区后的按顺序的第八个,依此类推,这个“八”称为交叉因子。这个交叉因子的来历有必要详述一下,我们知道,数据读取经常需要按顺序读取一系列相邻的扇区(逻辑数据相邻)。如对磁道扇区按物理顺序进行编号,很有可能出现当磁头读取完第一个扇区后,由于盘片转速过快来不及读取下一个扇区,(要知道物理相邻扇区位置距离是极小的),必须等待转完一圈,这极大浪费了时间。所以就用交叉来解决这个问题。

柱面
柱面其实是我们抽象出来的一个逻辑概念,前面说过,离盘心最远的磁道为0磁道,依此往里为1磁道,2磁道,3磁道….,不同面上相同磁道编号则组成了一个圆柱面,即所称的柱面(Cylinder)。


将物理相邻的若干个扇区称为了一个簇。操作系统读写磁盘的基本单位是扇区,而文件系统的基本单位是簇(Cluster)。在Windows下,随便找个几字节的文件,在其上面点击鼠标右键选择属性,看看实际大小与占用空间两项内容,如大小:15 字节 (15 字节), 占用空间:4.00 KB (4,096 字节)。这里的占用空间就是你机器分区的簇大小,因为再小的文件都会占用空间,逻辑基本单位是4K,所以都会占用4K。 簇一般有这几类大小 4K,8K,16K,32K,64K等。簇越大存储性能越好,但空间浪费严重。簇越小性能相对越低,但空间利用率高。NTFS格式的文件系统簇的大小为4K。

4. 分区划分

4.1 BIOS

BIOS(Basic Input/Output System)
每一台普通的电脑都会有一个BIOS,用于加载电脑最基本的程式码,担负着初始化硬件,检测硬件功能以及引导操作系统的任务。

0磁道0扇区

在传统的系统上,当我们启动计算的时候,默认的最开始会读取0磁道0扇区的数据,其是以512bytes 为单位来进行硬盘的分区划分,它不属于任何分区,用来标识我们创建的分区信息等。

格式

MBR(Master Boot Record): 指的是一个一段程序而非一个空间

  • 446bytes: boot loader 主引导记录
  • 64bytes: 分区表
  • 16bytes: 标识一个分区
  • 2bytes: 55AA用来标识结尾
    实战演示:
# 首先使用 fdisk -l 确定MBR位置,标记 * 即为mbr所在分区
[root@localhost ~]# fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00093397

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    41943039    20458496   8e  Linux LVM
下面的省略了......

# 备份MBR
dd if=/dev/sda1 of=/root/mbr bs=512 count=1

# 恢复MBR:
dd if=/root/mbr of=/dev/sda1 bs=512 count=1

# 恢复分区表:
dd if=/root/mbr of=/dev/sda1 bs=512 skip=446 count=66
注:mbr大小512 所以bs=512 count=1 bs=512 skip=446 count=66 用来确定分区表在备份文件中的位置

# 查看 mbr 分区信息
[root@localhost ~]# hexdump -C mbr.txt 
00000000  58 46 53 42 00 00 10 00  00 00 00 00 00 01 f4 00  |XFSB............|
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000020  46 74 a4 dd d2 48 40 cb  a6 0e 3f 8f 32 c8 e0 2d  |Ft...H@...?.2..-|
00000030  00 00 00 00 00 01 00 04  00 00 00 00 00 00 00 80  |................|
00000040  00 00 00 00 00 00 00 81  00 00 00 00 00 00 00 82  |................|
00000050  00 00 00 01 00 00 7d 00  00 00 00 04 00 00 00 00  |......}.........|
00000060  00 00 03 55 b4 b4 02 00  01 00 00 10 00 00 00 00  |...U............|
00000070  00 00 00 00 00 00 00 00  0c 09 08 04 0f 00 00 19  |................|
00000080  00 00 00 00 00 00 02 00  00 00 00 00 00 00 00 af  |................|
00000090  00 00 00 00 00 01 44 98  00 00 00 00 00 00 00 00  |......D.........|
000000a0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
000000b0  00 00 00 00 00 00 00 02  00 00 00 00 00 00 00 00  |................|
000000c0  00 00 00 00 00 00 00 01  00 00 00 8a 00 00 00 8a  |................|
000000d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000200
有一部分给缺失了

分区类型

  • 最多4个主分区
  • 3主分区+1扩展(N个逻辑分区)

4.2 UEFI

UEFI(Unified Extensible Firmware Interface)

  • 即“统一的可扩展固件接口”,是一种详细描述全新类型接口的标准,是适用于电脑的标准固件接口,旨在代替BIOS(基本输入/输出系统)。
  • 这种接口用于操作系统自动从预启动的操作环境,加载到一种操作系统上,从而达到开机程序化繁为简节省时间的目的。
  • UEFI抛去了传统BIOS需要长时间自检的问题,让硬件初始化以及引导系统变得简洁快速。

UEFI的优点

  • 通过保护预启动或预引导进程,抵御bootkit攻击,从而提高安全性。
  • 缩短了启动时间和从休眠状态恢复的时间。
  • 支持容量超过2.2 TB的驱动器。
  • 支持64位的现代固件设备驱动程序,系统在启动过程中可以使用它们来对超过172亿GB的内存进行寻址。
  • UEFI硬件可与BIOS结合使用。

5. fdisk命令

fdisk:对于一块硬盘来讲,最多只能管理15分区

格式:fdisk -l [-u] [device...]

参数选项:

  • -b <size>
    sector size (512, 1024, 2048 or 4096)
  • -c[=<mode>]
    compatible mode: 'dos' or 'nondos' (default)
  • -h
    print this help text
  • -u[=<unit>]
    display units: 'cylinders' or 'sectors' (default)
  • -v
    print program version
  • -C <number>
    specify the number of cylinders
  • -H <number>
    specify the number of heads
  • -S <number>
    specify the number of sectors per track
  • -l
    列出指定设备的分区表信息并退出,如果没有给出设备,那么使用那些在 /proc/partitions(如果存在)

实战演示:

[root@localhost ~]# fdisk -l
# 第一块硬盘的总量
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00093397

# 单位为扇区,即为512KB
Device Boot         Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    41943039    20458496   8e  Linux LVM

# 第二块硬盘的分区表为空,暂时没有分区
Disk /dev/sdb: 5368 MB, 5368709120 bytes, 10485760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
[root@localhost ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.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
Building a new DOS disklabel with disk identifier 0xd2d77080.

Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   # 删除一个分区
   d   delete a partition
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   # 列出所有分区
   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
   # 修改分区id
   t   change a partition's system id
   # 修改容量单位
   u   change display/entry units
   # 检测分区表
   v   verify the partition table
   # 保存退出
   w   write table to disk and exit
   x   extra functionality (experts only)

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): 1
First sector (2048-10485759, default 2048):   
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759): +1G
Partition 1 of type Linux and of size 1 GiB is set

Command (m for help): l

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
 1  FAT12           27  Hidden NTFS Win 82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx         
 5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data    
 6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility   
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt         
 9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access     
 a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs        
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT            
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor      
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor      
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary  
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS    
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep        
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT            
1e  Hidden W95 FAT1 80  Old Minix      

Command (m for help): q

查看内核是否已经识别新的分区

cat /proc/partations

通知内核重新读取硬盘分区表

  • partx -a
# 如果指定设备则重读特定设备,不指明则一次读取,如果你有两个设备则需要执行两次
partx -a /dev/sda
  • partx -a -n M:N
partx -a -n 4:6 /dev/sda
  • kpartx -a /dev/DEVICE
kpartx -a /dev/sda
  • partprobe [/dev/DEVICE]
    在Cetntos中使用的命令,能够重新的读取设定的分区。

Linux磁盘管理
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容

  • 导读目录 硬盘的组成 硬盘的物理结构主要针对的是机械硬盘及其内部的结构加以介绍,以下内容可能不是硬盘内部全部的部件...
    香吉矢阅读 4,035评论 0 12
  • 1 概述 本文通过对讲解了磁盘的基本概念,分区,创建文件系统,挂载,卸载等步骤进行讲解。使得用户能够创建基本的磁盘...
    ghbsunny阅读 1,497评论 0 0
  • 目录磁盘结构磁盘分区磁盘分区管理文件系统管理挂载 一、磁盘结构 (一)设备文件 设备文件:linux系统下一切皆文...
    哈喽别样阅读 990评论 0 0
  • 一、概要 1、操作系统的内核。 2、操作系统的五大管理功能:进程管理、存储管理、...
    _Jason___阅读 997评论 0 3
  • 2017年读的第一本书,其实读完之后才联想起之前小时候看的电影,发现我以前可能真的没能读懂这本书,或者说这部电影。...
    Sayammy阅读 647评论 0 1