8 磁盘管理

磁盘作为存储数据的重要载体,在如今日渐庞大的软件资源面前显得格外重要。在计算机领域,广义的说硬盘、光盘、软盘、U盘等用来保存数据信息的磁性存储介质都可以称为磁盘。

如何规划和管理磁盘特别是硬盘是网络管理员的重要工作内容之一。硬盘购买后,必须经过物理安装、分区、格式化(即创建文件系统)和挂载等环节后才能存储程序和数据,熟练掌握磁盘的每一个环节的技术是对网络管理员的基本要求。

同时,作为网络管理员,还必须掌握磁盘配额、逻辑卷管理(LVM)等技术,以便更加灵活、有效、安全的管理好磁盘。本章将对磁盘管理的基本过程和技术进行介绍。

8  学习目标:

理解磁盘的基本概念

会使用fdisk命令对磁盘进行分区

能对各类分区进行格式化操作

会挂载和卸载分区

会对磁盘进行配额管理

使用LVM实现动态磁盘管理

 


8.1 磁盘的基本概念

 

8.1.1硬盘的接口类型

ATA,全称AdvancedTechnology Attachment

是用传统的 40-pin 并口数据线连接主板与硬盘的,接口速度最大为133MB/s,因为并口线的抗干扰性太差,且排线占用空间较大,不利电脑内部散热,已逐渐被SATA 所取代。

SATA,全称Serial ATA

也就是使用串口的ATA接口,因抗干扰性强,且对数据线的长度要求比ATA低很多,支持热插拔等功能,SATA-II的接口速度為375MB/s,而新的SATA-III标准可达到750MB/s的传输速度。SATA的数据线也比ATA的细得多,有利于机箱內的空气流通,整理线材也比较方便。

SCSI,全称是SmallComputer System Interface(小型机系统接口)

经历多代的发展,从早期的 SCSI-II,到目前的 Ultra320 SCSI 以及 Fiber-Channel (光纤通道),接口型式也多种多样。SCSI 硬盘广为工作站级個人电脑以及服务器所使用,因此会使用较为先进的技術,如碟片转速15000rpm的高转速,且资料传输时CPU占用率较低,但是单价也比相同容量的 ATA 及 SATA 硬盘更加昂贵。

SAS,全称是SerialAttached SCSI

新一代的SCSI技术,和SATA硬盘相同,都是采取序列式技术以获得更高的传输速度,可达到6Gb/s。此外也透过缩小连接线改善系统内部空间等。

此外,由于SAS硬盘可以与SATA硬盘共享同样的背板,因此在同一个SAS存储系统中,可以用SATA硬盘来取代部分昂贵的SAS硬盘,节省整体的存储成本。但SATA存储系統并不能连接SAS硬盘。

FC,全称是FibreChannel(光纤通道接口)

拥有此接口的硬盘在使用光纤联接时具有热插拔性、高速带宽(4Gb/s或10Gb/s)、远程连接等特点;内部传输速率也比普通硬盘更高。限制于其高昂的售价, 通常用于高端服务器领域。

SSD:是由控制单元和固态存储单元(DRAM或FLASH芯片)组成的硬盘。

固态硬盘的接口规范和定义、功能及使用方法上与普通硬盘的相同,在产品外形和尺寸上也与普通硬盘一致,SSD分类两类,一种是闪存(FLASH芯片)作为存储介质,另外一种是采用DRAM作为存储介质。SSD的特点是性能好,价格高

8.1.2磁盘在Linux系统中的表示

Linux中,磁盘的表示方法不像Windows中表示的一样,如表8.1

8.1.1  Linxu磁盘设备文件名对照表

设备

设备文件名

软盘驱动器

/dev/fd[0-1]

当前CD ROM/DVD ROM

/dev/cdrom

IDE硬盘

/dev/hd[a-z]

虚拟磁盘/半虚拟化

/dev/vd[a-z]

SCSI/SATA/SAS/USB硬盘/U盘

/dev/sd[a-z]

 

1个磁盘阵列设备

/dev/md0

1个SCSI磁带设备

/dev/st0

在将一个磁盘合理的分区后,分区的表示方式 设备名称+分区号,如图8.1.2 sda1(第一块硬盘的第一个分区),sda2

 
 

8.1.2  Linux磁盘分区显示

主流的分区机制分为MBR和GPT,分区不是硬盘的功能,而是一个软件的概念,下一章将会讲解MBR和GPT

 


8.2 MBR/GPT

 

8.2.1 什么是MBR和GPT?

MBR的全称是Master Boot Record(主引导记录)

MBR早在1983年IBM PC DOS 2.0中就已经提出。之所以叫“主引导记录”,是因为它是存在于驱动器开始部分的一个特殊的启动扇区。这个扇区包含了已安装的操作系统的启动加载器和驱动器的逻辑分区信息。

 
 

主引导扇区是硬盘的第一扇区。它由三个部分组成,主引导记录MBR、硬盘分区表DPT和硬盘有效标志。在总共512字节的主引导扇区里MBR占446个字节,偏移地址0000H--0088H),它负责从活动分区中装载,并运行系统引导程序;第二部分是Partition table区(DPT分区表),占64个字节;第三部分是Magic number,占2个字节。

MBR分区表系统

所谓启动加载器,是一小段代码,用于加载驱动器上其他分区上更大的加载器。如果你安装了Windows,Windows启动加载器的初始信息就放在这个区域里——如果MBR的信息被覆盖导致Windows不能启动,你就需要使用Windows的MBR修复功能来使其恢复正常。如果你安装了Linux,则位于MBR里的通常会是GRUB加载器。

MBR最大支持2.2TB磁盘,它无法处理大于2.2TB容量的磁盘。MBR还只支持最多4个主分区——如果你想要更多分区,你需要创建所谓“扩展分区”,并在其中创建逻辑分区。

 

GPT的全称是Globally Unique Identifier Partition Table

意即GUID分区表,鉴于MBR的磁盘容量和分区数量已经不能满足硬件发展的需求,GPT首要的任务就是突破了2.2T分区的限制,最大支持18EB的分区。

GPT分区表系统

 
 

而在分区数量上,GPT会为每一个分区分配一个全局唯一的标识符,理论上GPT支持无限个磁盘分区,不过在Windows系统上由于系统的限制,最多只能支持128个磁盘分区,基本可以满足所有用户的存储需求。在每一个分区上,这个标识符是一个随机生成的字符串,可以保证为地球上的每一个GPT分区都分配完全唯一的标识符。

在安全性方面,GPT分区表也进行了全方位改进。在早期的MBR磁盘上,分区和启动信息是保存在一起的。如果这部分数据被覆盖或破坏,事情就麻烦了。相对的,GPT在整个磁盘上保存多个这部分信息的副本,因此它更为健壮,并可以恢复被破坏的这部分信息。GPT还为这些信息保存了循环冗余校验码(CRC)以保证其完整和正确——如果数据被破坏,GPT会发觉这些破坏,并从磁盘上的其他地方进行恢复。

 

MBRGPT的优缺点

MBR的优点:

支持32bit和64bit系统

兼容旧电脑

MBR的缺点:

最多4个主分区

扩展分区:一个扩展分区会占用一个主分区的一个名额

逻辑分区:在逻辑分区中,继续划分扩展分区,最多支持63个IDE分区和15个SCSI分区

最大支持2.2TB磁盘

 

GPT的优点:

支持超过2T的硬盘

向后兼容MBR

GPT的缺点:

必须在支持UEFI的硬件上才能使用

必须使用64bit系统

 

说完了磁盘的分区类型,就该轮到磁盘工具的使用了,如何分区格式化等,将在下一节讲解。

 

 


8.3 磁盘工具

8.3.1 磁盘工具类型

由于目前磁盘分区主要有MBR以及GPT两种,而这两种格式的分区工具都不太一样,我们会使用fdisk处理MBR分区或gdisk来处理GPT分区。当然还有一个parted 这个都能使用的工具。

8.3.2 fdisk的使用

fdsik 能划分磁盘成为若干个区,同时也能为每个分区指定分区的文件系统,比如linux 、fat32、 linux 、linux swap 、fat16 以及其实类Unix类操作系统的文件系统等;当然我们用fdisk 对磁盘操作分区时,并不是一个终点,我们还要对分区进行格式化所需要的文件系统;这样一个分区才能使用。

我们可以通过fdisk -l 详细的查看机器的磁盘和分区情况

[root@server ~]# 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: 0x000c55ae

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *        2048     1026047      512000   83  Linux

/dev/sda2         1026048    41943039    20458496   8e  Linux LVM

 

Disk /dev/mapper/centos-root: 18.8 GB, 18756927488 bytes, 36634624 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 /dev/mapper/centos-swap: 2147 MB, 2147483648 bytes, 4194304 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 /dev/sda

如果我们想查看单个硬盘情况,可以通过fdisk -l /dev/sda1 来操作

fdisk -l 输出的硬盘标识为准

其中 sda有两个主分区,分别是主分区 sda1和sda2  

硬盘总容量=主分区(包括扩展分区)总容量

扩展分区容量=逻辑分区总容量

 

为了直观的体验fdisk 拿了一块新的磁盘/dev/sdb

[root@server ~]# 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 0xabc7f208.

 

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

   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 

p 表示主分区 默认是p

e 表示扩展分区

CCommand (m for help): n

Partition type:

   p   primary (0 primary, 0 extended, 4 free)

   e   extended

Select (default p): <默认是p 主分区>

Using default response p

Partition number (1-4, default 1): <4个主分区>

First sector (2048-41943039, default 2048): <从2048开始>

Using default value 2048

Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +1G

Partition 1 of type Linux and of size 1 GiB is set

<这里选择+1G ,完成后p查看一下>

Command (m for help): p

 

Disk /dev/sdb: 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: 0xabc7f208

<这就是刚刚创建好的>

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1            2048     2099199     1048576   83  Linux

 

Command (m for help):

我们尝试添加一个扩展分区

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 (2099200-41943039, default 2099200): <默认就好>

Using default value 2099200

Last sector, +sectors or +size{K,M,G} (2099200-41943039, default 41943039): +10G

Partition 2 of type Extended and of size 10 GiB is set  <添加了10G>

 

Command (m for help): p

 

Disk /dev/sdb: 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: 0xabc7f208

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1            2048     2099199     1048576   83  Linux

/dev/sdb2         2099200    23070719    10485760    5  Extended

 

Command (m for help):

 

但是 扩展创建好了并不能使用,扩展分区的作用就是 划分逻辑分区

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 <会自动顺序从5开始选择>

First sector (2101248-23070719, default 2101248):

Using default value 2101248

Last sector, +sectors or +size{K,M,G} (2101248-23070719, default 23070719): +5G

Partition 5 of type Linux and of size 5 GiB is set <选择加5G >

<创建第二个逻辑分区>

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 6<这里就变成了6>

First sector (12589056-23070719, default 12589056):

Using default value 12589056

Last sector, +sectors or +size{K,M,G} (12589056-23070719, default 23070719):

Using default value 23070719

Partition 6 of type Linux and of size 5 GiB is set

 

Command (m for help): p

 

Disk /dev/sdb: 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: 0xabc7f208

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1            2048     2099199     1048576   83  Linux

/dev/sdb2         2099200    23070719    10485760    5  Extended

/dev/sdb5         2101248    12587007     5242880   83  Linux

/dev/sdb6        12589056    23070719     5240832   83  Linux

 

Command (m for help):

 

从上面的步骤,创建了两个主分区(包含扩展分区) 和两个逻辑分区 ,逻辑分区的空间是扩展分区的空间。

当规划完3个主分区后,剩余的空间最好全部分配给扩展分区,以免浪费。

 

创建完你需要的分区 w保存

保存后 lsblk查看当前磁盘情况

Command (m for help): w

The partition table has been altered!

 

Calling ioctl() to re-read partition table.

Syncing disks.

[root@server ~]# lsblk

NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda               8:0    0   20G  0 disk

├─sda1            8:1    0  500M  0 part /boot

└─sda2            8:2    0 19.5G  0 part

  ├─centos-root 253:0    0 17.5G  0 lvm  /

  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]

sdb               8:16   0   20G  0 disk

├─sdb1            8:17   0    1G  0 part  <1G 的主分区>

├─sdb2            8:18   0    1K  0 part  

├─sdb5            8:21   0    5G  0 part  

└─sdb6            8:22   0    5G  0 part

 

lsblk 查看磁盘信息 可以看的出来,逻辑分区的序号从5开始

 

如果发现自己规划的不是很完美可以用d 来删除

[root@server ~]# 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.

 

 

Command (m for help): d

Partition number (1,2,5,6, default 6): 6   

<1是主分区,2是扩展分区,5,6是逻辑分区>

Partition 6 is deleted

 

Command (m for help): d

Partition number (1,2,5, default 5): 5

Partition 5 is deleted

 

Command (m for help): d

Partition number (1,2, default 2):

Partition 2 is deleted

 

Command (m for help): p

 

Disk /dev/sdb: 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: 0xabc7f208

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1            2048     2099199     1048576   83  Linux

 

Command (m for help):

 

重新规划后创建了三个主分区一个扩展分区,三个逻辑分区

[root@server ~]# lsblk

NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda               8:0    0   20G  0 disk

├─sda1            8:1    0  500M  0 part /boot

└─sda2            8:2    0 19.5G  0 part

  ├─centos-root 253:0    0 17.5G  0 lvm  /

  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]

sdb               8:16   0   20G  0 disk

├─sdb1            8:17   0    1G  0 part

├─sdb2            8:18   0    2G  0 part

├─sdb3            8:19   0    2G  0 part

├─sdb4            8:20   0    1K  0 part

├─sdb5            8:21   0    5G  0 part

├─sdb6            8:22   0    5G  0 part

└─sdb7            8:23   0    5G  0 part

 

 

8.3.3 gdisk的使用

gdisk磁盘管理工具,是针对GPT而开发的,也只能对GPT格式分区才能使用,对于MBR是没什么用的。

gdisk的使用方法跟fdisk很相似,进入到交互界面用使用“?”查看帮助

[root@server ~]# gdisk /dev/sdb

GPT fdisk (gdisk) version 0.8.6

 

Partition table scan:

  MBR: protective

  BSD: not present

  APM: not present

  GPT: present

 

Found valid GPT with protective MBR; using GPT.

 

Command (? for help): ?

b back up GPT data to a file

c change a partition's name

d delete a partition

i show detailed information on a partition

l list known partition types

n add a new partition

o create a new empty GUID partition table (GPT)

p print the partition table

q quit without saving changes

r recovery and transformation options (experts only)

s sort partitions

t change a partition's type code

v verify disk

w write table to disk and exit

x extra functionality (experts only)

? print this menu

 

Command (? for help):

创建一个分区

Command (? for help): n

Partition number (1-128, default 1):  <上限128>

First sector (34-41943006, default = 2048) or {+-}size{KMGTP}:

Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: +1G

Current type is 'Linux filesystem'  <默认的格式是 linux filesystem>

Hex code or GUID (L to show codes, Enter = 8300):

Changed type of partition to 'Linux filesystem'

 

Command (? for help): p

Disk /dev/sdb: 41943040 sectors, 20.0 GiB

Logical sector size: 512 bytes

Disk identifier (GUID): 47381B75-C564-4531-9C82-CFC72A1B7A65

Partition table holds up to 128 entries

First usable sector is 34, last usable sector is 41943006

Partitions will be aligned on 2048-sector boundaries

Total free space is 39845821 sectors (19.0 GiB)

 

Number  Start (sector)    End (sector)  Size       Code  Name

   1            2048         2099199   1024.0 MiB  8300  Linux filesystem

 

Command (? for help): w <w写入>

 

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING

PARTITIONS!!

 

Do you want to proceed? (Y/N): y

OK; writing new GUID partition table (GPT) to /dev/sdb.

The operation has completed successfully.

创建一个分区,用lsblk查看是否创建成功

[root@server ~]# lsblk

NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda               8:0    0   20G  0 disk

├─sda1            8:1    0  500M  0 part /boot

└─sda2            8:2    0 19.5G  0 part

  ├─centos-root 253:0    0 17.5G  0 lvm  /

  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]

sdb               8:16   0   20G  0 disk

└─sdb1            8:17   0    1G  0 part

GPT分区的上限是128已经能满足普通使用了,分区的默认标识是8300 Linux filesystem。

gdisk其他的操作与fdisk很类似,在上一小节详细的讲过了,gdisk就由你们自己慢慢体验了。

8.3.parted的使用

在工作中常用的磁盘工具,支持超大的磁盘(2TB以上)分区,可以用与MBR/GPT,下面来学习parted的使用。

[root@server ~]# parted /dev/sdb

GNU Parted 3.1

Using /dev/sdb

Welcome to GNU Parted! Type 'help' to view a list of commands.

(parted)            

这就是parted 的交互界面

使用 help来查看帮助

(parted) help                                                             

  align-check TYPE N                        check partition N for TYPE(min|opt)

        alignment

  help [COMMAND]                           print general help, or help on COMMAND

  mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)

  mkpart PART-TYPE [FS-TYPE] START END     make a partition

  name NUMBER NAME                         name partition NUMBER as NAME

  print [devices|free|list,all|NUMBER]     display the partition table, available

        devices, free space, all found partitions, or a particular partition

  quit                                     exit program

  rescue START END                         rescue a lost partition near START and END

  rm NUMBER                                delete partition NUMBER

  select DEVICE                            choose the device to edit

  disk_set FLAG STATE                      change the FLAG on selected device

  disk_toggle [FLAG]                       toggle the state of FLAG on selected device

  set NUMBER FLAG STATE                    change the FLAG on partition NUMBER

  toggle [NUMBER [FLAG]]                   toggle the state of FLAG on partition

        NUMBER

  unit UNIT                                set the default unit to UNIT

  version                                  display the version number and copyright

        information of GNU Parted

(parted)              

在交互界面 使用p可以查看单个磁盘的信息

(parted) p                                                                

Model: VMware, VMware Virtual S (scsi)

Disk /dev/sdb: 21.5GB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

Disk Flags:

 

Number  Start   End     Size    File system  Name              Flags

 1      1049kB  1075MB  1074MB               Linux filesystem

使用parted -l可以查看所有磁盘信息

[root@server ~]# parted -l

Model: VMware, VMware Virtual S (scsi)

Disk /dev/sda: 21.5GB

Sector size (logical/physical): 512B/512B

Partition Table: msdos

Disk Flags:

 

Number  Start   End     Size    Type     File system  Flags

 1      1049kB  525MB   524MB   primary  xfs          boot

 2      525MB   21.5GB  20.9GB  primary               lvm

 

Model: VMware, VMware Virtual S (scsi)

Disk /dev/sdb: 21.5GB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

Disk Flags:

 

Number  Start   End     Size    File system  Name              Flags

 1      1049kB  1075MB  1074MB               Linux filesystem

 

Model: Linux device-mapper (linear) (dm)

Disk /dev/mapper/centos-swap: 2147MB

Sector size (logical/physical): 512B/512B

Partition Table: loop

Disk Flags:

 

Number  Start  End     Size    File system     Flags

 1      0.00B  2147MB  2147MB  linux-swap(v1)

 

Model: Linux device-mapper (linear) (dm)

Disk /dev/mapper/centos-root: 18.8GB

Sector size (logical/physical): 512B/512B

Partition Table: loop

Disk Flags:

 

Number  Start  End     Size    File system  Flags

 1      0.00B  18.8GB  18.8GB  xfs

 

Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0

has been opened read-only.

Model: NECVMWar VMware IDE CDR10 (scsi)                                   

Disk /dev/sr0: 4330MB

Sector size (logical/physical): 2048B/2048B

Partition Table: msdos

Disk Flags:

 

Number  Start   End     Size    Type     File system  Flags

 2      4563kB  30.2MB  25.7MB  primary

简单的使用parted工具

[root@server ~]# parted /dev/sdb

GNU Parted 3.1 <parted的软件版本号>

Using /dev/sdb <将对这个磁盘进行操作>

Welcome to GNU Parted! Type 'help' to view a list of commands.<欢迎信息>

(parted) p         <p 查看分区信息>                                                       

Model: VMware, VMware Virtual S (scsi)

Disk /dev/sdb: 21.5GB

Sector size (logical/physical): 512B/512B

Partition Table: pc98

Disk Flags:

 

Number  Start  End  Size  File system  Name  Flags

 

(parted) mklabel   <修改分区标签>                                                       

New disk label type? gpt

Warning: The existing disk label on /dev/sdb will be destroyed and all data on this

disk will be lost. Do you want to continue?

Yes/No? yes                                                               

(parted) p                                                                

Model: VMware, VMware Virtual S (scsi)

Disk /dev/sdb: 21.5GB

Sector size (logical/physical): 512B/512B

Partition Table: gpt   <修改成功>

Disk Flags:

 

Number  Start  End  Size  File system  Name  Flags

 

(parted) mkpart                                                           

Partition name?  []? gpt2t      <指定分区名字>

File system type?  [ext2]? ext3   <指定分区文件系统>                                         

Start? 1                      <指定分区开始位置>                                            

End? 2GB                     <指定分区结束位置>                                             

(parted) p                                                                

Model: VMware, VMware Virtual S (scsi)

Disk /dev/sdb: 21.5GB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

Disk Flags:

 

Number  Start   End     Size    File system  Name   Flags

 1      1049kB  2000MB  1999MB               gpt2t

 

(parted) q                       <退出>                                  

Information: You may need to update /etc/fstab.

 

深入使用parted工具

[root@server ~]# parted /dev/sdb                                          

GNU Parted 3.1

Using /dev/sdb

Welcome to GNU Parted! Type 'help' to view a list of commands.

(parted) p                                                                

Model: VMware, VMware Virtual S (scsi)     <显示磁盘类型为scsi磁盘>

Disk /dev/sdb: 21.5GB <磁盘大小为21.5GB>

Sector size (logical/physical): 512B/512B <扇区大小为512B>

Partition Table: gpt

Disk Flags:

 

Number  Start  End  Size  File system  Name  Flags

 

(parted) mkpart                                                           

Partition name?  []? part1                <创建分区>                               

File system type?  [ext2]? ext2            <设定分区名称>                              

Start? 1 <指定起始位置>

End? 1G                               <指定终止位置>                                   

(parted) mkpart                                                           

Partition name?  []? part2                                                

File system type?  [ext2]? ext3                                           

Start? 1.1G

End? 2G

(parted) mkpart

Partition name?  []? part3                                                

File system type?  [ext2]? ext4

Start? 2.1G                                                               

End? -1

(parted) p                                                                

Model: VMware, VMware Virtual S (scsi)

Disk /dev/sdb: 21.5GB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

Disk Flags:

 

Number  Start   End     Size    File system  Name   Flags

 1      1049kB  1000MB  999MB                part1

 2      1000MB  2000MB  999MB                part2

 3      2000MB  21.5GB  19.5GB               part3

 

(parted) rm 3                  <删除分区3>

(parted) p                     <再次查看分区状态>                                            

Model: VMware, VMware Virtual S (scsi)

Disk /dev/sdb: 21.5GB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

Disk Flags:

<显示分区删除成功,剩下两个>

Number  Start   End     Size   File system  Name   Flags

 1      1049kB  1000MB  999MB               part1

 2      1000MB  2000MB  999MB               part2

 

(parted) q                                                                

Information: You may need to update /etc/fstab.

 

 

parted磁盘工具使用也比较简单,忘记了一些命令用help查看帮助,既然分区好了  那就要使用了,使用之前我们还需要做一件事,那就是格式化。

 


8.4 分区格式化

8.4.1文件系统

文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。

文件系统由三部分组成:文件系统的接口,对对象操纵和管理的软件集合,对象及属性。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。

简单的来说文件系统是在磁盘或分区组织存储文件或数据的方法和格式。

文件系统有很多类型:

8.4.1  Linux文件系统类型介绍

名称

文件系统详细描述

Vfat

² LinuxDoswindows系统下的FAT(包括FAT16FAT32)文件系统的一个统称。

ext

² 第一个专门为Linux设计的文件系统类型,称为扩展文件系统。

² 由于在稳定性、速度和兼容性方面存在许多缺陷,现已很少使用。

ext2

² 称为二级扩展文件系统。1993年发布,专门为Linux设计的

² 在速度和CPU利用率上具有较突出的优势,是GNU/Linux系统中标准的文件系统,支持256字节的长文件名,文件存取性能极好。

² ext2既可用于块设备(如硬盘),也被用在软盘等移动存储设备上

Ext3

² 3代扩展(Extended)文件系统,是Red Hat Linux 7.2版本以后ext2的升级版本,兼容ext2

² 增加了文件系统日志记录功能,称为日志式文件系统

² 是目前Linux默认采用的文件系统。最大支持8TB的分区。

² RHEL5经过优化,最大支持16T的分区

ext4

² 是下一代文件系统,理论支持1024PB大小(1PB=1024TB)的存贮设备,支持文件的连续写入,减少文件碎片,提高磁盘的读写性能

swap

² 使用交换分区来提供虚拟内存,大小一般是系统物理内存的2倍。

² 在安装Linux操作系统时创建

² 由操作系统自行管理。 

ReiserFS

² 是基于平衡树的文件系统结构,尤其对于大量文件的巨型文件系统,如服务器上的文件系统,搜索速度要比ext2快;ext2使用局部的二分查找法,综合性能比不上ReiserFS

XFS

² 64 位日志文件系统。最初是由 Silicon GraphicsInc. 90 年代初开发的。

JFS

² IBM 企业服务器使用的企业级日志文件系统

nfs

² 即网络文件系统,用于在Unix系统间通过网络进行文件共享,用户可将网络中NFS服务器提供的共享目录,挂载到本地的文件目录中,从而实现操作和访问NFS文件系统中的内容。

iso9660

² 是光盘所使用的标准文件系统,Linux对该文件系统也有很好的支持,不仅能读取光盘和光盘ISO映像文件,而且还支持刻录光盘。

ntfs

² WinNT/2000/2003使用的文件系统

我们常用的就两种,xfs和ext4类型。

8.4.xfs与ext4文件系统

xfs一种高性能的日志文件系统,最早于1993年,由Silicon Graphics为他们的IRIX操作系统而开发,是IRIX 5.3版的默认文件系统。2000年5月,Silicon GraphicsGNU通用公共许可证发布这套系统的源代码,之后被移植到Linux 内核上。xfs 特别擅长处理大文件,同时提供平滑的数据传输

为什么xfs开发了那么久还那么受欢迎呢? 因为xfs为 Linux提供了一种健壮的、优秀的以及功能丰富的文件系统,并且这种文件系统所具有的可伸缩性能够满足最苛刻的存储需求。

使用mkfs命令将分区转换为xfs文件系统

[root@server ~]# mkfs -t xfs /dev/sdb2

meta-data=/dev/sdb2              isize=256    agcount=4, agsize=60992 blks

         =                       sectsz=512   attr=2, projid32bit=1

         =                       crc=0        finobt=0

data     =                       bsize=4096   blocks=243968, imaxpct=25

         =                       sunit=0      swidth=0 blks

naming   =version 2              bsize=4096   ascii-ci=0 ftype=0

log      =internal log           bsize=4096   blocks=853, version=2

         =                       sectsz=512   sunit=0 blks, lazy-count=1

realtime =none                   extsz=4096   blocks=0, rtextents=0

[root@server ~]#

ext4是继承了ext3的文件系统,第四代扩展文件系统,并嵌入在Linux内核中,所以不需要安装包就可以使用。

xfs文件系统一样,使用mkfs工具就可以将分区转换成ext4

[root@server ~]# mkfs -t ext4 /dev/sdb3

mke2fs 1.42.9 (28-Dec-2013)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=0 blocks, Stripe width=0 blocks

65536 inodes, 262144 blocks

13107 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=268435456

8 block groups

32768 blocks per group, 32768 fragments per group

8192 inodes per group

Superblock backups stored on blocks:

32768, 98304, 163840, 229376

 

Allocating group tables: done                            

Writing inode tables: done                            

Creating journal (8192 blocks): done

Writing superblocks and filesystem accounting information: done

 

[root@server ~]#

 


8.5 分区挂载

8.5.1 手动挂载

磁盘进行分区,格式化,我们想使用这个分区要怎么做呢?不像windows一样,可以直接使用,linux 中需要挂载才能使用。

首先要创建一个挂载点。

[root@server ~]# mkdir xfs

[root@server ~]# ls

anaconda-ks.cfg  Documents  Music     Public     Videos

Desktop          Downloads  Pictures  Templates  xfs

然后利用mount工具挂载到挂载点上

[root@server ~]# mount /dev/sdb3 xfs

挂载成功

[root@server ~]# lsblk

NAME            MAJ:MIN   RM  SIZE   RO  TYPE  MOUNTPOINT

sda                  8:0    0    20G    0   disk

├─sda1             8:1    0    500M  0   part

└─sda2             8:2    0    19.5G  0   part

  ├─centos-root    253:0   0     17.5G  0   lvm    /

  └─centos-swap   253:1    0    2G     0   lvm    [SWAP]

sdb                 8:16    0    20G    0   disk

├─sdb1            8:17    0    953M   0   part

├─sdb2            8:18    0    953M   0   part

└─sdb3            8:19    0     1G    0    part   /root/xfs     

  <挂载点上出现了挂载目录,表示挂载成功>

在这个目录上写入数据的时候,就会将数据写入到sdb3这个分区

 

8.5.2 自动挂载

手动挂载有个缺点,那就是重启后就会断开挂载,那么为了下次开机能正常使用,就只能用别的办法了。

那就是写入文件了,开机挂载的文件 /etc/fstab

# /etc/fstab

# Created by anaconda on Mon Dec  5 20:24:55 2016

#

# Accessible filesystems, by reference, are maintained under '/dev/disk'

# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

#

/dev/mapper/centos-root     /              xfs     defaults      0  0

/dev/mapper/centos-swap    swap          swap    defaults      0  0

其实这个 /etc/fstab 就是将我们使用 mount 来挂载一个装置到系统的某个挂载点, 所需要下达的指令内容,将这些内容通通写到 /etc/fstab 里面去,而让系统一开机就主动挂载。

那么 mount 下达指令时,需要哪些参数?

/dev/sdb3   /root/ext4        ext4      defaults       0           0

分区       挂载点     文件系统类型    参数     dump备份   fsck扫描磁盘

前面的4个已经很熟悉了,每个档案系统还有很多参数可以加入的,例如中文编码的 iocharset=big5,codepage=950 之类的,当然还有很多常见的参数,具体可以看mount中的详细介绍。

具体说一下后2个:dump和fsck。

是否dump备份指令作用:

Linux当中,可以利用dump这个指令来进行系统的备份。

dump 指令则会针对 /etc/fstab 的设定值,去选择是否要将该 partition 进行备份的动作,0代表不要做dump备份,1代表要进行dump的动作。2 也代表要做dump备份动作,不过该 partition 重要度比1小。

是否以fsck检验扇区:

开机的过程中,系统预设会以 fsck 检验我们的 partition 内的 filesystem 是否完整 (clean)。不过,某些 filesystem 是不需要检验的,例如虚拟内存 swap ,或者是特殊档案系统,例如 /proc 与 /sys 等等。

所以在这个字段中,我们可以设定是否要以fsck检验该 filesystem。0 是不要检验, 1 是要检验, 2 也是要检验,不过 1 会比较早被检验 一般来说,都不需要检验。

 

一般来说, 当我们编辑 /etc/fstab 后,为了避免可能的错误,通常就会以 mount -a (模拟开机自动挂载操作)这个指令来测试是否能正常挂载。这是很重要的一个测试动作。

如果有错误,会这样提示。

[root@server ~]# mount -a

mount: wrong fs type, bad option, bad superblock on /dev/sdb3,

       missing codepage or helper program, or other error

 

       In some cases useful info is found in syslog - try

       dmesg | tail or so.

 

8.逻辑卷管理

8.6.1 LVM是什么? 

LVM(Logical Volume Manager)逻辑卷管理,是Linux对磁盘分区管理的一种机制。

Linux用户安装Linux时容易错误的评估分区大小,容易导致空间不够,或者空间剩太多,导致资源浪费,普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文件系统的限制,也不能跨越多个分区来存放,所以也不能同时放到别的磁盘上。

如果要扩充的话,只能换一个更大块的磁盘,然后分区,格式化,数据备份,再copy过去。一不小心又太大了,再把上面的步骤再来一次。多麻烦啊!

LVM的重点在于 可以弹性的调整filesystem的容量。而且,还可以整合多个磁盘,让多块大小不同的磁盘整合成一块,如此看来LVM是非常方便好用的。

下面就来学习LVM。

8.6.2 PV/VG/LV的使用

在学习LVM之前,需要了解PV,PE,VG.LV是什么。

 
 

8.6.2  LVM框架

PV(physical volume):物理卷

物理卷在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区。

VG(volume group):卷群组

卷组建立在物理卷上,一卷组中至少要包括一物理卷,卷组建立后可动态的添加卷到卷组中,一个逻辑卷管理系统工程中可有多个卷组。

LV(logical volume):逻辑卷

逻辑卷建立在卷组基础上,卷组中未分配空间可用于建立新的逻辑卷,逻辑卷建立后可以动态扩展和缩小空间。

PE(physical extent):物理卷单元块

物理区域是物理卷中可用于分配的最小存储单元,物理区域大小在建立卷组时指定,一旦确定不能更改,同一卷组所有物理卷的物理区域大小需一致,新的pv加入到vg后,pe的大小自动更改为vg中定义的pe大小。

 

基本的原理讲解完了,那么就开始学习如何使用LVM。

1.准备物理分区(Physical Partions)

首先,我们需要选择用于 LVM 的物理存储器。这些通常是标准分区,但也可以是已创建的 Linux Software RAID 卷。这里我利用fdisk命令,将sdb、sdc两块磁盘分了两个区sdb1、sdc1, 通过fdisk的t指令指定分区为8e类型(Linux LVM) 。

 

2.创建物理卷PV(Physical Volumes)

物理卷(Physical Volumes)简称PV,是在磁盘的物理分区或与磁盘分区具有同样功能的设备(如RAID)上创建而来。它只是在物理分区中划出了一个特殊的区域,用于记载与LVM相关的管理参数。

创建物理卷的命令是 pvcreate :

[root@server ~]# pvcreate /dev/sdb1

Physical volume "/dev/sdb1" successfully created

[root@server ~]# pvcreate /dev/sdc1

Physical volume "/dev/sdc1" successfully created

以上命令分别将/dev/sdc1、/dev/sdd1初始化成物理卷,使用物理卷显示命令pvdisplay查看物理卷情况如下:

[root@server ~]# pvdisplay

--- NEW Physical volume ---

PV Name /dev/sdb1

VG Name

PV Size 36.00 GB

Allocatable NO

PE Size (KByte) 0

Total PE 0

Free PE 0

Allocated PE 0

PV UUID QDmnUd-tuvH-U4Hn-n5Ry-zGRT-O1yK-67Dxbb

--- NEW Physical volume ---

PV Name /dev/sdc1

VG Name

PV Size 36.00 GB

Allocatable NO

PE Size (KByte) 0

Total PE 0

Free PE 0

Allocated PE 0

PV UUID NDBf68-6qrD-9hE6-Rotv-RdxL-Azvv-7NlC0S

 

3.创建卷组VG(Volume Groups)

卷组(Volume Group)简称VG,它是一个或者多个物理卷的组合。卷组将多个物理卷组合在一起,形成一个可管理的单元,它类似于非LVM系统中的物理硬盘。

创建卷组的命令为vgcreate,下面利用它创建了一个名为“lvmdisk”的卷组,该卷组包含/dev/sdb1、/dev/sdc1两个物理卷。

[root@server ~]# vgcreate lvmdisk /dev/sdb1 /dev/sdc1

Volume group "lvmdisk" successfully created

使用卷组查看命令vgdisplay显示卷组情况:

[root@server ~]# vgdisplay

--- Volume group ---

VG Name lvmdisk

System ID

Format lvm2

Metadata Areas 2

Metadata Sequence No 1

VG Access read/write

VG Status resizable

MAX LV 0

Cur LV 0

Open LV 0

Max PV 0

Cur PV 2

Act PV 2

VG Size 71.98 GB

PE Size 4.00 MB

Total PE 18428

Alloc PE / Size 0 / 0

Free PE / Size 18428 / 71.98 GB

VG UUID SARfuj-wAUI-od81-VWAc-A1nt-aaFN-JWaPVf

当多个物理卷组合成一个卷组后时,LVM会在所有的物理卷上做类似格式化的工作,将每个物理卷切成一块一块的空间,这一块一块的空间就称为PE(Physical Extent ),它的默认大小是4MB。

由于受内核限制的原因,一个逻辑卷(Logic Volume)最多只能包含65536个PE(Physical Extent),所以一个PE的大小就决定了逻辑卷的最大容量,4 MB 的PE决定了单个逻辑卷最大容量为 256 GB,若希望使用大于256G的逻辑卷,则创建卷组时需要指定更大的PE。在Red Hat Enterprise Linux AS 4中PE大小范围为8 KB 到 16GB,并且必须总是 2 的倍数。

例如,如果希望使用 64 MB 的PE创建卷组,这样逻辑卷最大容量就可以为4 TB,命令如下:

# vgcreate 64MB lvmdisk /dev/sdb1 /dev/sdc1

 

4.创建逻辑卷LV(Logical Volumes)

逻辑卷(Logical Volumes)简称LV,是在卷组中划分的一个逻辑区域,类似于非LVM系统中的硬盘分区。

创建逻辑卷的命令为lvcreate,通过下面的命令,我们在卷组lvmdisk上创建了一个名字为pldy1的逻辑卷,大小为15GB,其设备入口为/dev/lvmdisk/pldy1。

[root@server dev]# lvcreate -L 15G -n pldy1 lvmdisk

Logical volume "pldy1" created

也可以使用-l参数,通过指定PE数来设定逻辑分区大小。

例如,希望创建一个使用全部空间的逻辑卷,需要先查清卷组中的PE总数,通过上面的vgdisplay命令查得当前卷组PE总数为18428,命令如下:

# lvcreate -l 18428 -n pldy1 lvmdisk

当逻辑卷创建成功后,可以使用lvdisplay命令查看逻辑卷情况:

[root@server ~]# lvdisplay

--- Logical volume ---

LV Name /dev/lvmdisk/pldy1

VG Name lvmdisk

LV UUID FQcnm3-BMyq-NkJz-hykw-9xg1-Qy8d-8UeGCN

LV Write Access read/write

LV Status available

# open 0

LV Size 15.00 GB

Current LE 3840

Segments 1

Allocation inherit

Read ahead sectors 0

Block device 253:0

同卷组一样,逻辑卷在创建的过程中也被分成了一块一块的空间,这些空间称为LE(Logical Extents),在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

 

5.创建文件系统

在逻辑卷上创建ext3文件系统:

[root@server ~]# mkfs -t ext3 /dev/lvmdisk/pldy1

创建了文件系统以后,就可以加载并使用了:

[root@server ~]# mkdir /opt/Oracle

[root@server ~]# mount /dev/lvmdisk/pldy1 /opt/Oracle

为了在系统启动时自动加载文件系统,则还需要在/etc/fstab中添加内容:

/dev/lvmdisk/pldy1 /opt/Oracle ext3 defaults 1 2

管理LVM

LVM的最大好处就是可以动态地调整分区大小,而无须重新启动机器,下面让我们来体验一下吧!继续上面的实例,现假设逻辑卷/dev/lvmdisk/pldy1空间不足,需要增加其大小,我们分两种情况讨论:

 

1.卷组中有剩余的空间

通过vgdisplay命令可以检查当前卷组空间使用情况:

[root@server ~]# vgdisplay

--- Volume group ---

VG Name lvmdisk

System ID

Format lvm2

Metadata Areas 2

Metadata Sequence No 2

VG Access read/write

VG Status resizable

MAX LV 0

Cur LV 1

Open LV 0

Max PV 0

Cur PV 2

Act PV 2

VG Size 71.98 GB

PE Size 4.00 MB

Total PE 18428

Alloc PE / Size 3840 / 15.00 GB

Free PE / Size 14588 / 56.98 GB

VG UUID SARfuj-wAUI-od81-VWAc-A1nt-aaFN-JWaPVf

确定当前卷组剩余空间56.98GB,剩余PE数量为14588个。在这里将所有的剩余空间全部增加给逻辑卷 /dev/lvmdisk/pldy1。

[root@server Oracle]# lvextend -l+14588 /dev/lvmdisk/pldy1

Extending logical volume pldy1 to 56.98 GB

Logical volume pldy1 successfully resized

上面的命令使用了-l+14588参数,它的意思是给指定的逻辑卷增加14588个PE。如果不是将全部空间都使用,还可使用其他形式的lvextend命令。

例如将逻辑卷/dev/lvmdisk/pldy1增加5GB的空间,使其空间达到20GB,可写成:

# lvextend -L+5G /dev/lvmdisk/pldy1

# lvextend -L 20G /dev/lvmdisk/pldy1

增加了逻辑卷容量后,就要通过ext2online命令刷新文件系统的大小了。

[root@server ~]# ext2online /opt/Oracle/

转换好后,让我们查看一下文件系统的当前状态:

[root@server ~]# df lh

Filesystem 1k-blocks Used Available Use% Mounted on

/dev/sda1 7.4G 1.8G 5.3G 25% /

none 135M 0 135M 0% /dev/shm

/dev/mapper/lvmdisk-pldy1 71G 81M 68G 1% /opt/Oracle

 

2.卷组中空间不足

当卷组中没有足够的空间用于扩展逻辑卷的大小时,就需要增加卷组的容量,而增加卷组容量的惟一办法就是向卷组中添加新的物理卷。

首先是增加一块新硬盘(36GB SCSI 硬盘),并对其完成分区、创建物理卷等工作。接下来是利用vgextend命令将新的物理卷(/dev/sdd1)加入到卷组中。

扩展卷组的命令如下:

[root@server ~]# vgextend lvmdisk /dev/sdd1

Volume group "lvmdisk" successfully extended

利用vgdisplay命令查看卷组lvmdisk的情况:

[root@server ~]# vgdisplay

--- Volume group ---

VG Name lvmdisk

System ID

Format lvm2

Metadata Areas 3

Metadata Sequence No 3

VG Access read/write

VG Status resizable

MAX LV 0

Cur LV 1

Open LV 0

Max PV 0

Cur PV 3

Act PV 3

VG Size 107.97 GB

PE Size 4.00 MB

Total PE 27640

Alloc PE / Size 3840 / 15.00 GB

Free PE / Size 23800 / 92.97 GB

VG UUID l8YPvz-uD7h-oj1A-0qS5-TFcT-mbC7-QbjzCu

完成卷组的扩容后,就可以按照第一种情况的方法完成逻辑卷的扩容,最终实现分区的动态调整。