走进Linux服务器之一:Linux操作基础9——Linux磁盘管理(一)

前言

之前我们学习了关于管道和重定向相关的知识,现在我们来讨论一下关于硬盘(存储)管理相关的知识。

一、基本分区

1.磁盘简介

磁盘,也称作硬盘、disk,不同于内存,它的容量比较大。

磁盘的类型,从工作原理区分可以分为机械硬盘固态硬盘

机械硬盘既是传统普通磁盘,主要有盘片、磁头、盘片转轴及控制电机、磁头控制器、数据转换器、接口、缓存等几个部分组成。

固态驱动器(Solid State Disk 或 Solid State Drive, 简称SSD),俗称固态硬盘,固态硬盘是用固态电子存储芯片阵列而制成的硬盘。

尺寸:硬盘的尺寸有1.8英寸、2.5英寸和3.5英寸大小的区别。

接口:硬盘的接口在早期为宽扁的IDE接口,SAS接口,目前主流的机械硬盘接口为SATA接口。

转速:硬盘的转速即为每分钟盘片可以转多少圈,一般的规格为5400rpm,7200rpm,10000rpm,15000rpm和30000rpm。但是转速过快会导致磁盘的噪音很大,所以目前大多数家用电脑都是5400和7200的转速。

一些术语:

  • 盘片:一块磁盘有若干个盘片,每个盘片都有可以存储数据的上、下两个盘面(Side)。这些盘面堆叠在主轴上高速旋转。

  • 柱面:所有盘面上的同一磁道构成一个圆柱,称作柱面。

  • 磁道:每个盘面被划分为多个同心圆,这些同心圆的轨迹就被称作磁道,磁道从外向内从0开始顺序编号。

  • 扇区:将一个盘面划分为若干内角相同的扇形,这样盘面上每个磁道就被分为若干段圆弧,每段圆弧叫做一个扇区。

命名:

在我们比较熟悉的windows系统中,磁盘从0开始编号,磁盘0、磁盘1……

在linux系统中(以CentOS为例),kernel(内核)对不同接口硬盘的命名方式如下:

对于SATA(串口):

/dev/sda

/dev/sdb

/dev表示设备文件目录,s代表sata串口,d代表硬盘,a为第一块。sdb同理为第二块硬盘。

对于IDE(并口):

/dev/hda
/dev/hdb

h代表接口类型为并口。

分区方式:

磁盘有两种分区方式,为MBR和GPT。

**MBR(Master Boot Record 主引导记录)**是一种很传统的分区方式,位于磁盘最前边的一段引导代码。MBR支持最大的磁盘容量是 <2TB,设计时分配4个分区。

如果希望超过4个分区,需要放弃主分区,改为扩展分区和逻辑分区。

**GPT(GUID Partition Table,GUID为 Globally Unique Identifier,全局唯一标识分区表)**分区模式使用GUID分区表,是源自EFI标准的一种较新的磁盘分区表的结构的标准。与普遍使用的主引导记录(MBR)分区方案相比,GPT提供了更加灵活的磁盘分区机制。GPT支持大于2T的硬盘,支持128个分区。

2.管理磁盘

管理新磁盘通常有三部曲:

分区(MBR或GPT)

格式化文件系统(File System)

挂载(mount)

  • 查看磁盘信息:

我们可以用如下的命令查看磁盘信息:

ll /dev/sd*

即为查看在dev目录下以sd开头的所有文件。

输出如下:

brw-rw----. 1 root disk 8,   0 Jan 28 09:42 /dev/sda
brw-rw----. 1 root disk 8,   1 Jan 28 09:42 /dev/sda1
brw-rw----. 1 root disk 8,   2 Jan 28 09:42 /dev/sda2
brw-rw----. 1 root disk 8,  16 Jan 28 09:42 /dev/sdb
brw-rw----. 1 root disk 8,  32 Jan 28 09:42 /dev/sdc
brw-rw----. 1 root disk 8,  48 Jan 28 09:42 /dev/sdd
brw-rw----. 1 root disk 8,  64 Jan 28 09:42 /dev/sde
brw-rw----. 1 root disk 8,  80 Jan 28 09:42 /dev/sdf
brw-rw----. 1 root disk 8,  96 Jan 28 09:42 /dev/sdg
brw-rw----. 1 root disk 8, 112 Jan 28 09:42 /dev/sdh
brw-rw----. 1 root disk 8, 128 Jan 28 09:42 /dev/sdi

我们可以看到权限位前面的第一位为b,不同于之前的目录d(directory),这里指的是磁盘b(block)。

或者我们也可以用下面的方式来查看硬盘:

lsblk

利用lsblk指令查看磁盘信息:

NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0    5G  0 disk 
sdc               8:32   0    5G  0 disk 
sdd               8:48   0    5G  0 disk 
sde               8:64   0    5G  0 disk 
sdf               8:80   0    5G  0 disk 
sdg               8:96   0    5G  0 disk 
sdh               8:112  0    5G  0 disk 
sdi               8:128  0    5G  0 disk 
sr0              11:0    1  4.4G  0 rom  /run/media/root/CentOS 7 x86_64
  • 创建分区:

以MBR为例,首先我们启动分区工具:

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 0xb09ef24c.
Command (m for help):

这里第二段提示我们,更改将会停留在内存中,直到我们决定将更改写入磁盘,使用写入命令前请三思。

我们输入字母n进行分区

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 

接下来会令你选择主分区(primary)或是扩展分区(extended)。MBR主分区最多只能有4个。所以是4 free。

我们先选择p,划分主分区。

Select (default p): p
Partition number (1-4, default 1): 

接下来选择分区的编号,我们选择1。

Partition number (1-4, default 1): 1
First sector (2048-10485759, default 2048): 

起始扇区,由于我在虚拟机里挂载的磁盘为5G,一共可以存储5,368,709,120个字节,我们磁盘扇区一般以512字节为一个单位,所以5,368,709,120/512 = 10,485,760,和上面shell中提示的最大大小一致。

在这里我们就敲击回车键,选择默认的第2048个扇区即可。(0-2047存储的就是MBR的文件)。

First sector (2048-10485759, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759): 

这里需要我们选择最后一个扇区。即为选择磁盘分区结束的扇区,即分区大小。

我们实际环境根据磁盘划分,如4T硬盘,一般可以500G为一个分区。

我们可以输入分区大小"+2G"然后回车。

Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759): +2G
Partition 1 of type Linux and of size 2 GiB is set

这里提示我们分区1已设置为Linux类型,大小设为2GB。但是这一切都没有生效,只是存储在了内存里。

我们需要在会话模式中输入w进行保存:

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

这样才真正的将磁盘分区成功,并且自动退出了会话模式。

我们可以输入命令来刷新分区表:

partprobe /dev/sdb

partprobe即为partition probe ,分区准备。

这样第二块硬盘sdb的分区刷新成功。

这个时候我们查看磁盘信息,即可看到我们给第二块硬盘sdb的2GB分区信息:

我们可以用命令:

fdisk -l /dev/sdb

查看第二块磁盘的分区结果:

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
Disk label type: dos
Disk identifier: 0xb09ef24c

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4196351     2097152   83  Linux

同样,我们也可以用lsblk来查看磁盘信息:

lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0    5G  0 disk 
└─sdb1            8:17   0    2G  0 part 
sdc               8:32   0    5G  0 disk 
sdd               8:48   0    5G  0 disk 
sde               8:64   0    5G  0 disk 
sdf               8:80   0    5G  0 disk 
sdg               8:96   0    5G  0 disk 
sdh               8:112  0    5G  0 disk 
sdi               8:128  0    5G  0 disk 
sr0              11:0    1  4.4G  0 rom  /run/media/root/CentOS 7 x86_64

至此,一般的分区操作就完成了。

  • 创建文件系统:

在这里我们要用命令:

mkfs.ext4 /dev/sdb1
#或者用参数 -t 指定文件系统类型
mkfs -t ext4 /dev/sdb1

mk指的是make,与mkdir命令中的mk一致,指创造。

fs即为file system,文件系统。

ext4为extended4 扩展文件系统的第四代,是Linux文件系统的类型。在Windows下对应的是NTFS和FAT32。

/dev/sdb1 第二块串口硬盘的第一个分区,准备格式化了。

输入命令后可以看到:

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
131072 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done 

我们可以看到一个文件块大小为4096个字节(block)。如果学习过操作系统的文件系统(在后面的文章我也会阐述),就会明白这个是什么,包括下面的inode等概念。

  • 挂载:

格式化磁盘之后我们还要将其挂载,创建挂载点。一个分区一个挂载点。

我们先创建一个挂载点的目录:

mkdir /mnt/disk1

再用mount命令进行挂载:

mount -t ext4 /dev/sdb1 /mnt/disk1

这样我们就把磁盘sdb1挂载到了目录/mnt/disk1中。

我们可以用如下命令查看:

df -hT

Filesystem              Type      Size  Used Avail Use% Mounted on
devtmpfs                devtmpfs  974M     0  974M   0% /dev
tmpfs                   tmpfs     991M     0  991M   0% /dev/shm
tmpfs                   tmpfs     991M   11M  980M   2% /run
tmpfs                   tmpfs     991M     0  991M   0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G  4.2G   13G  25% /
/dev/sda1               xfs      1014M  172M  843M  17% /boot
tmpfs                   tmpfs     199M   20K  199M   1% /run/user/0
/dev/sr0                iso9660   4.4G  4.4G     0 100% /run/media/root/CentOS 7 x86_64
/dev/sdb1               ext4      2.0G  6.0M  1.8G   1% /mnt/disk1

用df命令看到最后一行就是我们新挂载的sdb1磁盘。

  • 卸载

可以用umount指令来解除磁盘的挂载:

umount /dev/sdb1

如果在挂载的时候,在磁盘里面保存了文件,那么解除挂载之后文件不会消失,再挂载之后,将会出现在新挂载的目录之下。相当于拔出U盘。

  • 创建逻辑分区

当我们的硬盘需要4个及以上的分区时,我们的MBR引导不能满足创建4个以上的主分区,我们只能舍弃一个主分区并改为扩展分区,同样,在fdisk中可以进行操作:

Command (m for help): n
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended
Select (default e): 

我们可以看到只有一个空闲的主分区位置,我们现在创建扩展分区:

Select (default e): e
Selected partition 4
First sector (5015552-10485759, default 5015552): 
Using default value 5015552
Last sector, +sectors or +size{K,M,G} (5015552-10485759, default 10485759): 
Using default value 10485759
Partition 4 of type Extended and of size 2.6 GiB is set

输入e之后,开始扇区和结束扇区我们都选择默认的值,这样最后的空间都被划分到了扩展分区中,之后我们可以在扩展分区中划分多个逻辑分区,用来存储文件。扩展分区和主分区的最大不同在于,扩展分区不能安装操作系统。

创建扩展分区之后,在fdisk中输入n,将会默认创建逻辑分区。

创建若干个逻辑分区之后,我们在fdisk中输入p查看分区表,可以看到:

Command (m for help): p

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
Disk label type: dos
Disk identifier: 0xb09ef24c

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4196351     2097152   83  Linux
/dev/sdb2         4196352     4605951      204800   83  Linux
/dev/sdb3         4605952     5015551      204800   83  Linux
/dev/sdb4         5015552    10485759     2735104    5  Extended
/dev/sdb5         5017600     5427199      204800   83  Linux
/dev/sdb6         5429248     5838847      204800   83  Linux
/dev/sdb7         5840896     6250495      204800   83  Linux
/dev/sdb8         6252544    10485759     2116608   83  Linux

可以看到,分区1-3为主分区,分区4为扩展分区,分区5-8为分区4中的逻辑分区。

最后我们用lsblk查看所有磁盘的信息,可以看到:

NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0    5G  0 disk 
├─sdb1            8:17   0    2G  0 part /mnt/disk1
├─sdb2            8:18   0  200M  0 part /mnt/disk2
├─sdb3            8:19   0  200M  0 part 
├─sdb4            8:20   0  512B  0 part 
├─sdb5            8:21   0  200M  0 part 
├─sdb6            8:22   0  200M  0 part 
├─sdb7            8:23   0  200M  0 part 
└─sdb8            8:24   0    2G  0 part 
sdc               8:32   0    5G  0 disk 
sdd               8:48   0    5G  0 disk 
sde               8:64   0    5G  0 disk 
sdf               8:80   0    5G  0 disk 
sdg               8:96   0    5G  0 disk 
sdh               8:112  0    5G  0 disk 
sdi               8:128  0    5G  0 disk 
sr0              11:0    1  4.4G  0 rom  /run/media/root/CentOS 7 x86_64

可以看到,扩展分区sdb4,虽然包含了5-8分区,但是4分区只占了512B,也就是只占了一个扇区。

二、交换分区管理SWAP

1.简介

交换分区如果学习过操作系统的内存管理,就一定不会陌生,交换分区是用来"提升"内存的容量,防止OOM(out of memory)内存溢出。在Windows系统中,起到这个作用的空间叫做虚拟内存。

一般情况下,推荐swap的大小设置为内存的2倍。

大于4GB而小于16GB内存的操作系统,最少需要4GB交换空间。

大于16GB而小于64GB内存的操作系统,最少需要8GB交换空间。

大于64GB而小于256GB内存的操作系统,最少需要16GB交换空间。

2.查看当前的交换分区

我们可以先用free指令查看当前内存的使用情况:

free -m
              total        used        free      shared  buff/cache   available
Mem:           1980         784         522          26         673        1006
Swap:          2047           0        2047

可以看到我的虚拟机一共有2G内存,使用了784M,交换分区同样为2G,目前没有使用。

同时,我们可以用lsblk详细查看交换分区:

lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]

可以看到sda2分区中,swap分区大小为2G。

3.创建交换分区

  • 分区:

我们在创建交换分区的时候,可以先把硬盘按照主分区一样分区:

Command (m for help): p

Disk /dev/sdc: 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
Disk label type: dos
Disk identifier: 0x8adede63

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048     2099199     1048576   83  Linux

这个时候,sdc1还是Linux一般的存储文件的类型。

之后在fdisk的会话模式中输入t,然后输入82(具体的各种类型ID可以在输入t之后输入L查看):

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 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      
Hex code (type L to list all codes): 

可以看到上面列出了所有支持修改的文件系统类型,其中,82为Linux的交换分区类型,8e为Linux的逻辑卷类型LVM。

交换分区的ID为82(16进制)。输入82:

Hex code (type L to list all codes): 82
Changed type of partition 'Linux' to 'Linux swap / Solaris'

Command (m for help): p

Disk /dev/sdc: 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
Disk label type: dos
Disk identifier: 0x8adede63

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048     2099199     1048576   82  Linux swap / Solaris

Command (m for help): 

我们可以看到,这个时候sdc1已经成为交换分区了。

  • 格式化:

给交换分区格式化我们需要用mkswap命令,而不是mkfs命令:

mkswap /dev/sdc1
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=413af02f-3fdc-4df0-a00d-49f1d910664b
  • 挂载:

挂载交换分区用swapon命令:

swapon /dev/sdc1
  • 验证:

我们先用 free -m 查看内存使用情况:

free -m
              total        used        free      shared  buff/cache   available
Mem:           1980         784         521          26         673        1005
Swap:          3071           0        3071

可以看到交换分区变成了3G。

  • 卸载

交换分区解除挂载可以用swapoff指令:

swapoff /dev/sdc1

这样就卸载了交换分区的sdc1部分。

三、注意

在磁盘挂载的时候,被挂载的目录如果在挂载之前有文件,在挂载新的磁盘之后,挂载之前的文件将会被覆盖隐藏,该目录只会显示挂载的硬盘的文件!当我们卸载挂载的磁盘之后,挂载之前的文件又会显示出来。

总结

本次我们介绍了一般磁盘管理的常用指令,分区,格式化和挂载,同时我们也讨论了如何将交换分区格式化和挂载,接下来我们将会讨论关于逻辑卷LVM和其他磁盘管理的操作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值