阿里云数据盘的使用

在阿里云上买了一台ECS服务器(Centos7)和一块20G的数据盘,发现找不到数据盘,google一番找到了,又发现数据盘是个裸盘,就像刚买来的硬盘一样,需要分区、格式化(创建文件系统)、挂载才能使用。本文讲述一下这段经历。

在使用MBR的磁盘中,分区可分为主分区和扩展分区,在扩展分区中又可以分为多个逻辑分区。分区表位于MBR中,由于MBR只有512字节,限制了分区表中的数量,因此MBR磁盘最多包含4个分区,其中包含了3个主分区以及1个扩展分区中的多个逻辑分区。通常来说主分区/dev/sda1,/dev/sda2,/dev/sda3,/dev/sda4,但是由于最多只能有4个主分区,当需要有多于4个分区的时候,只能将最后一个分区用于扩展分区,于是逻辑分区从/dev/sda5开始,并且无论主分区是有用完,只要有扩展分区,那么逻辑分区都是从/dev/sda5开始的。这也是为什么在很多系统中存在/dev/sda1,/dev/sda2,/dev/sda5,而没有/dev/sda3,/dev/sda4的原因。

发现数据盘

可以有以下几种方法查看当前系统中的磁盘:

  • sudo fdisk -l
  • lsblk
  • sudo parted -l

通过sudo fdisk -l查看:

[davenkin@davenkin-vm ~]$ sudo fdisk -l
[sudo] password for davenkin:

Disk /dev/vda: 42.9 GB, 42949672960 bytes, 83886080 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: 0x0008d73a

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048    83884031    41940992   83  Linux

Disk /dev/vdb: 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

使用lsblk查看:

[davenkin@davenkin-vm ~]$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1 1024M  0 rom
vda    253:0    0   40G  0 disk
`-vda1 253:1    0   40G  0 part /
vdb    253:16   0   20G  0 disk

通过sudo parted -l查看:

[davenkin@davenkin-vm ~]$ sudo parted -l
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 42.9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  42.9GB  42.9GB  primary  ext4         boot


Error: /dev/vdb: unrecognised disk label
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:

可以看到,有个名为/dev/vdb的磁盘,空间20G,尚未进行分区。

此时,如果使用df -h是看不到/dev/vdb这个盘的,因为df -h只能显示已经创建了文件系统并且挂载之后的分区。

[davenkin@davenkin-vm ~]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G  3.5G   34G  10% /
devtmpfs        1.9G     0  1.9G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G  396K  1.9G   1% /run
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
tmpfs           380M     0  380M   0% /run/user/1000

分区

可以通过以下方式进行磁盘分区:

  • fdisk
  • parted

使用fdisk /dev/vdb进行分区:

[davenkin@davenkin-vm ~]$ sudo fdisk /dev/vdb
[sudo] password for davenkin:
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 0x4710ccf3.

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

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

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

上面,我们在20G的磁盘中创建了一个大小5.7G的分区,此时便可以查看到新建的分区了名字为/dev/vdb1

[davenkin@davenkin-vm ~]$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1 1024M  0 rom
vda    253:0    0   40G  0 disk
`-vda1 253:1    0   40G  0 part /
vdb    253:16   0   20G  0 disk
`-vdb1 253:17   0 10.5G  0 part

也可以通过sudo fdisk -l查看:

[davenkin@davenkin-vm ~]$ sudo fdisk -l
[sudo] password for davenkin:

Disk /dev/vda: 42.9 GB, 42949672960 bytes, 83886080 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: 0x0008d73a

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048    83884031    41940992   83  Linux

Disk /dev/vdb: 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: 0x255331f3

   Device Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048    11943039     5970496   83  Linux

但是此时用df -h依然是看不到的,因为我们只是创建了分区,格式化和挂载。

格式化(创建文件系统)

文件系统位于分区之上,使用mkfs.ext4创建EXT4文件系统:

[davenkin@davenkin-vm ~]$ sudo mkfs.ext4 /dev/vdb1
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
373888 inodes, 1492624 blocks
74631 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1528823808
46 block groups
32768 blocks per group, 32768 fragments per group
8128 inodes per group
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912, 819200, 884736

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

挂载分区

使用mount命令挂载刚才创建的/dev/vdb1分区:

sudo mount /dev/vdb1 /mnt/data

然后便可以查看到挂载之后的分区了,没有文件系统的分区是不能挂载的:

[davenkin@davenkin-vm ~]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G  3.5G   34G  10% /
devtmpfs        1.9G  4.0K  1.9G   1% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G  368K  1.9G   1% /run
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
tmpfs           380M     0  380M   0% /run/user/1000
/dev/vdb1       5.5G   23M  5.2G   1% /mnt/data

对于mount来说,我们需要首先创建号/mnt/data目录。可以看到,/mnt/data目录在创建好后,其实是隶属于/根目录的,也即属于/dev/vda1磁盘下,我们可以直接向目录中新建文件。然后,在mount了/dev/vdb1之后,原来的文件不可见了(但是依然存在于/dev/vda1上),然后新创建的文件会存于/dev/vdb1下。如果我们取消挂载/dev/vdb1,那么之前存在与/dev/vda1中的文件又会显示出来。

启动自动挂载

通过mount命令挂载分区,在机器重启之后就消失了,为了能使机器在启动的时候自动挂载分区,我们需要修改/etc/fstab文件:

echo /dev/vdb1 /mnt/data ext4 defaults 0 0 >> /etc/fstab

删除所有分区

方法一:

sudo wipefs -a /dev/vdb

方法二:

sudo dd if=/dev/zero of=/dev/vdb bs=512 count=1 conv=notrunc

逻辑卷(LVM)

当我们创建了了一个分区之后,它的大小便固定了,这个不利于之后的扩展,为此有了LVM,它可以动态地改变分区的大小。

LVM中主要有以下三个概念:

  • PV(Physical Volume):即物理分区或者磁盘。
  • VG(Volume Group):卷组,多个PV组成一个VG,VG就像一个池子一样。
  • LV(Logic Volume):逻辑卷,在VG上创建出来的对机器可见的分区,有自己的文件系统。

虽然LVM可以使用裸盘作为PV,但是并不推荐这么做,推荐先对磁盘进行分区,在用于LVM。

LVM使用步骤

使用LVM主要分为以下几步:

  1. 通过物理分区创建PV
  2. 通过PV创建VG
  3. 在VG上创建LV
  4. 格式化LV
  5. 挂载LV

为了使用LVM,我们先创建两个物理分区:

  • /dev/vdb1
  • /dev/vdb2

通过lsblk查看如下:

[davenkin@davenkin-vm dev]$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1 1024M  0 rom
vda    253:0    0   40G  0 disk
`-vda1 253:1    0   40G  0 part /
vdb    253:16   0   20G  0 disk
|-vdb1 253:17   0  5.7G  0 part
`-vdb2 253:18   0  4.8G  0 part
(1)通过物理分区创建PV
[davenkin@davenkin-vm dev]$ sudo pvcreate /dev/vdb1 /dev/vdb2
  Physical volume "/dev/vdb1" successfully created.
  Physical volume "/dev/vdb2" successfully created.

如果分区上已经有了文件系统,系统会提示我们需要擦除文件系统之后才能创建PV。

通过sudo pvs查看所创建的PV:

[davenkin@davenkin-vm dev]$ sudo pvs
  PV         VG Fmt  Attr PSize  PFree
  /dev/vdb1     lvm2 ---   5.69g  5.69g
  /dev/vdb2     lvm2 ---  <4.77g <4.77g
(2)通过PV创建VG

创建名为LVMVG的VG:

[davenkin@davenkin-vm dev]$ sudo vgcreate LVMVG /dev/vdb1 /dev/vdb2
  Volume group "LVMVG" successfully created

此时再次执行sudo pvs,可以看到PV所属于的VG了:

[davenkin@davenkin-vm dev]$ sudo pvs
  PV         VG    Fmt  Attr PSize  PFree
  /dev/vdb1  LVMVG lvm2 a--   5.69g  5.69g
  /dev/vdb2  LVMVG lvm2 a--  <4.77g <4.77g

通过sudo vgs查看所创建的VG:

[davenkin@davenkin-vm dev]$ sudo vgs
  VG    #PV #LV #SN Attr   VSize   VFree
  LVMVG   2   0   0 wz--n- <10.46g <10.46g
(3)在VG上创建LV

创建两个LV,名字分别为lv1和lv2:

[davenkin@davenkin-vm dev]$ sudo lvcreate -L 4G -n lv1 LVMVG
WARNING: ext4 signature detected on /dev/LVMVG/lv1 at offset 1080. Wipe it? [y/n]: y
  Wiping ext4 signature on /dev/LVMVG/lv1.
  Logical volume "lv1" created.
[davenkin@davenkin-vm dev]$ sudo lvcreate -L 4G -n lv2 LVMVG
  Logical volume "lv2" created.

查看所创建的LV:

[davenkin@davenkin-vm dev]$ sudo vgs -o +lv_size,lv_name
  VG    #PV #LV #SN Attr   VSize   VFree  LSize LV
  LVMVG   2   2   0 wz--n- <10.46g <2.46g 4.00g lv1
  LVMVG   2   2   0 wz--n- <10.46g <2.46g 4.00g lv2

此时执行sudo lsblk

[davenkin@davenkin-vm dev]$ lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0            11:0    1 1024M  0 rom
vda           253:0    0   40G  0 disk
`-vda1        253:1    0   40G  0 part /
vdb           253:16   0   20G  0 disk
|-vdb1        253:17   0  5.7G  0 part
| `-LVMVG-lv1 252:0    0    4G  0 lvm
`-vdb2        253:18   0  4.8G  0 part
  `-LVMVG-lv2 252:1    0    4G  0 lvm

可以看到,在创建LV时,根据物理分区的大小,两个LV分别在物理上位于/dev/vdb1和/dev/vdb2,此时/dev/vdb1和/dev/vdb2均有空间剩余。如果我们用VG中所有的剩余空间创建一个lv3,那么可以推断出,lv3将一部分位于/dev/vdb1上,另一部分位于/dev/vdb2上。

将VG所有剩余空间创建lv3:

[davenkin@davenkin-vm dev]$ sudo lvcreate -l 100%FREE -n lv3 LVMVG
  Logical volume "lv3" created.

此时在运行lsblk

NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0            11:0    1 1024M  0 rom
vda           253:0    0   40G  0 disk
`-vda1        253:1    0   40G  0 part /
vdb           253:16   0   20G  0 disk
|-vdb1        253:17   0  5.7G  0 part
| |-LVMVG-lv1 252:0    0    4G  0 lvm
| `-LVMVG-lv3 252:2    0  2.5G  0 lvm
`-vdb2        253:18   0  4.8G  0 part
  |-LVMVG-lv2 252:1    0    4G  0 lvm
  `-LVMVG-lv3 252:2    0  2.5G  0 lvm

可以看到lv3同时跨越了/dev/vdb1和/dev/vdb2。

创建号的LV可以从以下两个地方找到:

  • /dev/VG名/LV名
  • /dev/mapper/VG名-LV名

比如,以上创建的三个LV分别位于:

  • /dev/LVMVG/lv1
  • /dev/LVMVG/lv2
  • /dev/LVMVG/lv3

或者:

  • /dev/mapper/LVMVG-lv1
  • /dev/mapper/LVMVG-lv2
  • /dev/mapper/LVMVG-lv3
(4)格式化LV
[davenkin@davenkin-vm mapper]$ sudo mkfs.ext4 /dev/LVMVG/lv1
[sudo] password for davenkin:
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
262144 inodes, 1048576 blocks
52428 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1073741824
32 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
(5)挂载LV
sudo mount /dev/LVMVG/lv1 /mnt/data
(6)删除LV/VG/PV

删除LVM中的东西是需要顺序的,首先需要将mount上的LV取消挂载:

sudo umount /mnt/data

然后删除LV:

sudo lvremove /dev/LVMVG/lv1  /dev/LVMVG/lv2  /dev/LVMVG/lv3

然后删除VG:

sudo vgremove LVMVG

最后删除PV:

sudo pvremove /dev/vdb1  /dev/vdb2

你可能感兴趣的:(阿里云数据盘的使用)