はじめに
研究室の計算機リソースは何かとあらゆるサービスが稼働しているため,簡易に実験環境を構築するのであればクラウドコンピューティングサービス (以下,CCS)の仮想マシン(以下,VM)を利用する流れになっている.今回は Microsoft Azure の仮想マシンを利用してみることにした.
どの CCS においても VM を作成するとストレージがある程度準備されているように見えるが,基本的に一時的なストレージ (Temporary Storage) となっている.文字通り,永続的にデータを格納しておくことができず,課金が生じない停止状態(以下,非課金シャットダウン)にすると同時にデータが失われる.~~私もこれを把握しておらず 1 度だけ転送したデータが消去されたことがある...~~データを保持しながら非課金シャットダウンを行うためには,ストレージを追加する必要がある.その追加方法について簡単であるが忘備録として残しておく.
VM 前提条件
VM 情報 | 値 |
---|---|
OS | Ubuntsu 18.04(バージョンは基本的に関係ない) |
VM ボリューム | D64s_v3(関係ないが,一応載せておく) |
追加ストレージ | 2048 GiB(追加ボリュームは Azure ポータルサイトで追加しておく) |
ストレージ追加の作業内容
では,ストレージの追加作業について述べていく.
まず,ポータルサイトでディスクを追加すると次の画像のように,OS ディスクだけではなくデータディスク項目にエントリがある状態にしておく必要がある.
次に,仮想マシンに接続し,ディスクの空き状況を確認する.下記のようにコマンドを実行すると,VM の初期状態は以下のようなディスク状況になっているはずである.
~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 126G 0 126G 0% /dev
tmpfs 26G 936K 26G 1% /run
/dev/sda1 29G 1.3G 28G 5% /
tmpfs 126G 0 126G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 126G 0 126G 0% /sys/fs/cgroup
/dev/sda15 105M 3.6M 101M 4% /boot/efi
/dev/sdb1 503G 73M 478G 1% /mnt
tmpfs 26G 0 26G 0% /run/user/1000
見ての通り,接続はされているが認識されていないため,自分で認識させる必要がある.そのため,dmsg
コマンドにより,接続されている Small Computer System Interface (SCSI) ディスクを探し出すため,以下のコマンドを実行する.
~$ dmesg | grep SCSI
[ 0.608591] SCSI subsystem initialized
[ 1.440296] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 244)
[ 3.817171] sd 1:0:1:0: [sdb] Attached SCSI disk
[ 3.843656] sd 0:0:0:0: [sda] Attached SCSI disk
[ 4.023173] sd 3:0:0:0: [sdc] Attached SCSI disk
[ 8.647579] Loading iSCSI transport class v2.0-870.
/dev/sd{a,b,c} が検出されていることが分かり,df
コマンドでは sdc のディスクが認識されていないことが分かった.したがって,/dev/sdc のディスクを fdisk
コマンドによりパーティション分割する.
~$ sudo fdisk /dev/sdc
Welcome to fdisk (util-linux 2.31.1).
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.The size of this disk is 2 TiB (2199023255552 bytes). DOS partition table format cannot be used on drives for volumes larger than 2199023255040 bytes for 512-byte sectors. Use GUID partition table format (GPT).
Created a new DOS disklabel with disk identifier 0xf7a72ba7.
Command (m for help):
このような出力が得られ,コマンドを要求されるため,新しいパーティションを追加するために n
を入力する.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p):
次に,プライマリパーティションとして設定するためにタイプ p
を設定する.このとき,拡張パーティションとして設定したいのであれば,ここタイプ e
を入力する必要がある.デフォルトではタイプ p
が設定されているため,入力せず次に進んでも問題はない.
Select (default p):
Using default response p.
ここからは,引数を入力後の出力はないため,パーティション番号,セクタ開始位置,セクタ終了位置を続けてそれぞれ指定していく必要がある.今回はデータディスク全体を利用したいため,パーティションは一つで最大限利用できるように設定する.その場合は,デフォルト値がそのような設定になっているため,各質問ではエンターを入力するだけで問題ない.ここでいくつかに分けたいのであれば,各自で調整する必要がある.
Partition number (1-4, default 1):
First sector (2048-4294967295, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-4294967294, default 4294967294):
Created a new partition 1 of type 'Linux' and of size 2 TiB.
最終的に,新しく 2TiB のパーティションが作成されたメッセージが得られるはずである.パーティションテーブルを出力できる p
コマンドで確認してみる.
Command (m for help): p
Disk /dev/sdc: 2 TiB, 2199023255552 bytes, 4294967296 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0xf7a72ba7
Device Boot Start End Sectors Size Id Type
/dev/sdc1 2048 4294967294 4294965247 2T 83 Linux
最終行でうまく作成されていることが確認できれば,最後に w
コマンドを実行し,fdisk
コマンドを終了する.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
次に,パーティションを作成しただけであるため,そのパーティションにファイルシステムを書き込む必要がある.この作業は mkfs
コマンドにより行い,このコマンドの引数としてファイルシステムの種類とパーティションを指定する必要がある.したがって,下記のようなコマンドを実行する.
~$ sudo mkfs -t ext4 /dev/sdc1
mke2fs 1.44.1 (24-Mar-2018)
Discarding device blocks: done
Creating filesystem with 536870655 4k blocks and 134217728 inodes
Filesystem UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848, 512000000
Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done
このようなメッセージが得られれば,ファイルシステムの書き込みが完了している.※ Filesystem UUID: の値はコピーしておくとあとの作業で便利
ここまで完了すれば作業は大詰めで,残すところデータディスクのマウント,起動時の自動マウントの設定のみである.データディスクをマウントするためには,マウントポイントを指定する作成する必要があるため,ここでは /datadrive という名前のディレクトリを作成し,このディレクトリに作成した /dev/sdc1 パーティションをマウントする.
~$ sudo mkdir /datadrive
~$ sudo mount /dev/sdc1 /datadrive
以上で,マウントが完了したため,df
コマンドでディスク情報が出力されるようになる.
~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 126G 0 126G 0% /dev
tmpfs 26G 940K 26G 1% /run
/dev/sda1 29G 1.3G 28G 5% /
tmpfs 126G 0 126G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 126G 0 126G 0% /sys/fs/cgroup
/dev/sda15 105M 3.6M 101M 4% /boot/efi
/dev/sdb1 503G 73M 478G 1% /mnt
tmpfs 26G 0 26G 0% /run/user/1000
/dev/sdc1 2.0T 81M 1.9T 1% /datadrive1
最後に,起動時の自動マウントを設定する.設定にはそのドライブの Universally Unique Identifier(以下,UUID)が必要になる.ここまでの作業で得た UUID をコピーしている場合はそれを利用すればよいが,知りたい場合は blkid
コマンドを実行する.
~$ sudo -i blkid
/dev/sda1: LABEL="cloudimg-rootfs" UUID="zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz" ...
/dev/sda15: LABEL="UEFI" UUID="wwww-wwww" TYPE="vfat" ...
/dev/sdb1: UUID="yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy" TYPE="ext4" ...
/dev/sdc1: UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="ext4" ...
/dev/sda14: PARTUUID="vvvvvvvv-vvvv-vvvv-vvvv-vvvvvvvvvvvv"
こうして得た UUID を持つドライブに対するマウント設定を /etc/fstab ファイルに追加する必要がある.
~$ sudo vim /etc/fstab
:
:
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /datadrive ext4 defaults,nofail 1 2
この nofail
オプションを付けることで /etc/fstab の編集にミスが有ったとしても,VM が起動されるようになるため必ず追加しておく必要がある.
以上で,データディスク追加作業は終了であるため,VM を再起動後に,自動マウントの確認のためdf
コマンドでディスク情報を表示させる.
~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 126G 0 126G 0% /dev
tmpfs 26G 936K 26G 1% /run
/dev/sda1 29G 1.3G 28G 5% /
tmpfs 126G 0 126G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 126G 0 126G 0% /sys/fs/cgroup
/dev/sda15 105M 3.6M 101M 4% /boot/efi
/dev/sdc1 2.0T 81M 1.9T 1% /datadrive1
/dev/sdb1 503G 73M 478G 1% /mnt
tmpfs 26G 0 26G 0% /run/user/1000
以上のように,再起動後に自動でマウントされるように設定ができた.
おわりに
この記事での作業は,基本的に Microsoft Azure のハウツーガイドに記載されているため新しい情報は無いが,必要な作業をピックアップして Tips 的な内容は省略してすぐ読めるようにしている.そのため,より詳細な情報が必要な場合はハウツーガイドを一読するべきである.