Creating and Attaching a Block Storage Disk onto an ECS

By Anish Nath, Alibaba Cloud Tech Share Author. Tech Share is Alibaba Cloud’s incentive program to encourage the sharing of technical knowledge and best practices within the cloud community.

In Alibaba Cloud Elastic Compute Service (ECS) Linux servers, whenever you need to add additional storage capacity in an ECS server, adding disk is a possible and convenient solution. This tutorial is all about

  1. Creating a disk in Alibaba Cloud ECS instance.
  2. mounting this disk to a running ECS instance
  3. partitioning the cloud disk using fdisk.
  4. Unmounting the disk
  5. Remounting the Disk without performing partition.

Alibaba Cloud allows you to create a virtual block storage device (disks) that you can attach in to your virtual machines (ECS Instance).

Before You Begin

Make sure you have a valid Alibaba Cloud account to try out this experiment. You’ll also need an Alibaba Cloud ECS instance to follow the tutorial. The example shown in this document will only work on UNIX-based (Linux & OS X) machines which is running on Alibaba Cloud ECS instances.

Creating a Volume

Now let’s get started on creating the first Volume.

In the Alibaba cloud ECS console dashboard, click the Disks menu under Block storage.

Image for post
Image for post

Select the following (this may vary based on user need)

  1. Regions and zones vary based on the ECS regions,
  2. the Allocated disk sizes
Image for post
Image for post

Carefully review the setting of the new disk and finally hit the create button

Image for post
Image for post

Once the disk is Activated, it’s status will go to unmounted state

Image for post
Image for post

The first step is to mount or attach this disk to the running ECS instance

Once the disk is attached to the ECS instance, the disk status will be shown as In-Use.

You will see now in the “Mounting Point” column that the disk is attached into the ECS instance, in a device called “/dev/xvdb”

Image for post
Image for post

Now let’s login to ECS Linux Server instance as root.

To verify if the volume was attached properly, execute: fdisk -l

You should see some message like this:

root@webserver-01:~# fdisk -l Disk /dev/vda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders, total 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 identifier: 0x00040f1a
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 41940991 20969472 83 Linux
Disk /dev/vdb: 21.5 GB, 21474836480 bytes
16 heads, 63 sectors/track, 41610 cylinders, total 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 identifier: 0x00000000
Disk /dev/vdb doesn't contain a valid partition table

If you didn’t see the /dev/vdb getting detected, try rebooting the instance and check it again.

To format your device, execute

root@webserver-01:~# fdisk /dev/vdb

It will output something like this:

root@webserver-01:~# fdisk /dev/vdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x8e0e6a42.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
  1. Press n to create a new disk partition.
  2. Press p to create a primary disk partition.
  3. Press 1 to denote it as 1st disk partition.
  4. Press ENTER twice to accept the default of 1st and last cylinder — to convert the remainder of hard disk to a single disk partition

It will output something like this:

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
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):
Using default value 1
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039):
Using default value 41943039

Now, the next thing to do is enter these commands:

  1. Press t, then select the new partition you made.
  2. Press 83 change your new partition to 83, i.e. Linux partition type.
Command (m for help): t
Selected partition 1
Hex code (type L to list 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 codes): 83

Now, the next thing to do is to enter these commands:

  1. Press p, to display the partition
  2. Press w to write the partition table.
Command (m for help): pDisk /dev/vdb: 21.5 GB, 21474836480 bytes
16 heads, 63 sectors/track, 41610 cylinders, total 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 identifier: 0x8e0e6a42
Device Boot Start End Blocks Id System
/dev/vdb1 2048 41943039 20970496 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks

Finally, reboot the server

root@webserver-01:~# reboot

Check if the partition table is available: The new disk /dev/vdb is available for mounting

root@webserver-01:~# fdisk -l Disk /dev/vda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders, total 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 identifier: 0x00040f1a
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 41940991 20969472 83 Linux
Disk /dev/vdb: 21.5 GB, 21474836480 bytes
3 heads, 34 sectors/track, 411206 cylinders, total 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 identifier: 0x8e0e6a42
Device Boot Start End Blocks Id System
/dev/vdb1 2048 41943039 20970496 83 Linux

Now create the filesystem in the /dev/vdb partition by mkfs.ext4

root@webserver-01:~# mkfs.ext4 /dev/vdb1
mke2fs 1.42.9 (4-Feb-2014)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242624 blocks
262131 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
160 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, 1605632, 2654208,
4096000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

Warning This step assumes that you’re mounting an empty disk volume. If you’re mounting a volume that already has data on it, don’t use mkfs before mounting the volume Otherwise, you’ll format the volume and delete the existing data, refer to the section below.

Check the UUID of the volume by executing:

root@webserver-01:~# blkid
/dev/vda1: LABEL="/" UUID="165ce746-c938-4265-b23f-09ef38d270ac" TYPE="ext4"
/dev/vdb1: UUID="b70ec0bd-042f-4204-948d-59061c006e21" TYPE="ext4"

The line with /dev/vdb1 is what we are interested in the b70ec0bd-042f-4204–948d-59061c006e21 is the UUID

Create the Data folder

root@webserver-01:~# mkdir -p /data

Mount the volume to data directory using the volume UUID and the directory you just created

root@webserver-01:~# mount /dev/disk/by-uuid/b70ec0bd-042f-4204-948d-59061c006e21 /data

Verify the disk space, the new data directory is shown

root@webserver-01:~# df -kh 
Filesystem Size Used Avail Use% Mounted on
udev 232M 8.0K 232M 1% /dev
tmpfs 49M 352K 49M 1% /run
/dev/vda1 20G 3.3G 16G 18% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
none 5.0M 0 5.0M 0% /run/lock
none 245M 0 245M 0% /run/shm
none 100M 0 100M 0% /run/user
/dev/vdb1 20G 44M 19G 1% /data

Use the lsblk command to view your available disk devices and their mount points

root@webserver-01:/data# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 253:0 0 20G 0 disk
└─vda1 253:1 0 20G 0 part /
vdb 253:16 0 20G 0 disk
└─vdb1 253:17 0 20G 0 part /data

mount to persist after a reboot edit your fstab file to add the mount command:

/dev/disk/by-uuid/b70ec0bd-042f-4204-948d-59061c006e21 /data auto defaults,nofail 0  1

Warning: Errors in the /etc/fstab file can render a system unbootable. Do not shut down a system that has errors in the /etc/fstab file.

Congratulations! you had now attached a Disk to an ECS instance successfully, the same step is documented in Video Demo here

Unmount File Systems and Remounting Again

This disk contains the data, by any chance you need to add this data disk to another instance then you can perform the following step.

unmount the disk partition by using umount command, and remove the entry containing this disk information from the fstab

root@webserver-01:/# umount /data
root@webserver-01:/# df -kh
Filesystem Size Used Avail Use% Mounted on
udev 232M 8.0K 232M 1% /dev
tmpfs 49M 352K 49M 1% /run
/dev/vda1 20G 3.3G 16G 18% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
none 5.0M 0 5.0M 0% /run/lock
none 245M 0 245M 0% /run/shm
none 100M 0 100M 0% /run/user

and from the ECS console, select the disk and click on Unmount option as shown in below diagram.

Image for post
Image for post

After successful of the above operation, the disk can be mount again

Image for post
Image for post

Important:

you’re mounting a volume that already has data on it, don’t use mkfs before mounting the volume otherwise, you’ll format the volume and delete the existing data.

Repeat the step of mounting the disk from the ECS console to another running ECS instance. Once the ECS console operation done successfully, carefully execute the below step, this will preserve the data as no mkfs command is used.

root@webserver-02:/# fdisk /dev/vdb1
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x5f10d5d4.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
Partition number (1-4, default 1):
Using default value 1
First sector (2048-41940991, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41940991, default 41940991):
Using default value 41940991
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 83
Command (m for help): pDisk /dev/vdb1: 21.5 GB, 21473787904 bytes
16 heads, 63 sectors/track, 41608 cylinders, total 41940992 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 identifier: 0x5f10d5d4
Device Boot Start End Blocks Id System
/dev/vdb1p1 2048 41940991 20969472 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.WARNING: Re-reading the partition table failed with error 22: Invalid argument.
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)
Syncing disks.

Mount the volume and verify the operation.

root@webserver-02:/# rebootroot@webserver-01:~# mount /dev/disk/by-uuid/b70ec0bd-042f-4204-948d-59061c006e21 /data

The data is persisted in the disk

root@webserver-02:~# cd /data/
root@webserver-02:/data# ls
a

Check the disk Usage of the new partition.

root@webserver-01:/data# df -kh 
Filesystem Size Used Avail Use% Mounted on
udev 232M 4.0K 232M 1% /dev
tmpfs 49M 352K 49M 1% /run
/dev/vda1 20G 3.3G 16G 18% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
none 5.0M 0 5.0M 0% /run/lock
none 245M 0 245M 0% /run/shm
none 100M 0 100M 0% /run/user
/dev/vdb1 20G 44M 19G 1% /data

Reference:https://www.alibabacloud.com/blog/creating-and-attaching-a-block-storage-disk-onto-an-ecs_594350?spm=a2c41.12498914.0.0

Written by

Follow me to keep abreast with the latest technology news, industry insights, and developer trends.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store