2023-04-20
EC2の仮想マシンのタイプによっては、ほとんど変わらぬコストで揮発性(マシンシャットダウンですべて消える)のNVMe SSDがオマケで付属する。(メモリ最適化インスタンスr6gd.xlargeなど)
電源ONのたびに毎回起動時にmkfsやらmountやらしなくてはいけないが、それは以下記事のようにスタートアップスクリプトを仕込む。
さて、折角の高速ストレージなのだから、パーティションを切って一時ストレージとスワップ領域とに分けて利用したい。
上記起動時のスクリプトで行いたいから、対話型でなく非対話型(非インタラクティブ)でコマンドラインで完結したい。
1、partedのインストールと初期状態の表示
apt install parted
まっさらな状態の現在の状態を表示する。
parted -l Model: Amazon Elastic Block Store (nvme) Disk /dev/nvme0n1: 537GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 15 1049kB 134MB 133MB fat16 boot, esp 1 134MB 537GB 537GB ext4 Model: Amazon EC2 NVMe Instance Storage (nvme) Disk /dev/nvme1n1: 237GB Sector size (logical/physical): 512B/512B Partition Table: loop Disk Flags: Number Start End Size File system Flags
/dev/nvme1n1: 237GBが、オマケの揮発性Amazon EC2 NVMe Instance Storageであると表示されていて、まだ何もされていない。
2、GPTでラベル付け
非対話でコマンドラインで完結するには以下のようにする。
parted -s -a optimal /dev/nvme1n1 mklabel gpt
Partition Table: gpt になる。
3、スワップ用パーティションと残り領域パーティションの作成
ここでは、最初のパーティションは30GBのスワップ用、残り全部(-1)を一般用として2つのパーティションを作成。
非対話でコマンドラインで完結するには以下のようにする。
parted -s -a optimal /dev/nvme1n1 -- mkpart swap linux-swap 1 30GiB parted -s -a optimal /dev/nvme1n1 -- mkpart primary ext4 30GiB -1
確認すると
parted -l Model: Amazon EC2 NVMe Instance Storage (nvme) Disk /dev/nvme1n1: 237GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 32.2GB 32.2GB swap 2 32.2GB 237GB 205GB primary ls -alF /dev/nvme1* crw------- 1 root root 241, 1 Apr 21 12:21 /dev/nvme1 brw-rw---- 1 root disk 259, 3 Apr 21 14:03 /dev/nvme1n1 brw-rw---- 1 root disk 259, 6 Apr 21 14:03 /dev/nvme1n1p1 brw-rw---- 1 root disk 259, 7 Apr 21 14:03 /dev/nvme1n1p2
30GB, 200GBの2つのパーティションができた。
lsでdevを見ると、nvme1n1p1が1番、nvme1n1p2が2番として新規作成されている。
4、スワップの有効化
このままではただパーティションを切っただけで何も起こらない。まず最初のパーティションをスワップ初期化しOSに認識させ稼働開始させる。
mkswap /dev/nvme1n1p1 swapon /dev/nvme1n1p1
topコマンドで確認すると、
top Tasks: 126 total, 1 running, 125 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.1 us, 0.0 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 31837.9 total, 31403.5 free, 159.1 used, 275.3 buff/cache MiB Swap: 30719.0 total, 30719.0 free, 0.0 used. 31351.4 avail Mem
しっかりとSwapとして認識、稼働を開始した。
5、残り領域(パーティション2)をフォーマットし一般領域としてマウント
次に2番目のパーティションを普通に初期化してマウント。
mkfs -t ext4 /dev/nvme1n1p2 mke2fs 1.44.5 (15-Dec-2018) Discarding device blocks: done Creating filesystem with 49996800 4k blocks and 12500992 inodes Filesystem UUID: cbd79e86-c16c-4fdb-b0bc-eb117e2fafd9 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872 Allocating group tables: done Writing inode tables: done Creating journal (262144 blocks): done Writing superblocks and filesystem accounting information: done mkdir -p /disk mount /dev/nvme1n1p2 /disk df -h Filesystem Size Used Avail Use% Mounted on udev 16G 0 16G 0% /dev tmpfs 3.2G 8.4M 3.2G 1% /run /dev/nvme0n1p1 492G 1.9G 470G 1% / tmpfs 16G 0 16G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 16G 0 16G 0% /sys/fs/cgroup /dev/nvme0n1p15 127M 140K 127M 1% /boot/efi tmpfs 3.2G 0 3.2G 0% /run/user/1000 /dev/nvme1n1p2 187G 61M 178G 1% /disk
一番下にちゃんとマウントされている。
なお、ここでparted -lとすれば、フォーマット済みの各パーティションの情報も出る。
parted -l Model: Amazon EC2 NVMe Instance Storage (nvme) Disk /dev/nvme1n1: 237GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 32.2GB 32.2GB linux-swap(v1) swap 2 32.2GB 237GB 205GB ext4 primary
普通であればあとは/etc/fstabにそれぞれ書けばいいだけだが、ディスク自体が揮発性のため、毎回起動時にこれら作業を行う必要がある。(=/etc/fstabに書いても意味はない・むしろ誤動作の元)
これまでのコマンドをすべて、
のスクリプトに放り込んでしまえば、理論上毎回起動時に上記ディスクセットアップがなされるはずである。
6、コマンドラインでパーティションを削除するには
アンマウント、スワップならswapoffした上で、
parted -s -a optimal /dev/nvme1n1 rm
とする。今回例だとスワップなら1、残り領域なら2。
※本記事内容の無断転載を禁じます。
ご連絡は以下アドレスまでお願いします★
さくらインターネットでPython MecabをCGIから使う
さくらインターネットのPHPでAnalytics-G4 APIを使う
インクルードパスの調べ方
【Git】特定ファイルを除外する.gitignore
【Ubuntu/Debian】NVIDIA関係のドライバを自動アップデートさせない
【Python】Spacyを使用して文章から出発地と目的地を抜き出す
HomeBrewでApache2を入れて自動起動つきで動かしPHPモジュールと連携する
macOSに標準付属のApacheを自動起動つきで動かす
HomeBrewでPostgreSQLを入れて自動起動つきで動かす
【Windows10】リモートデスクトップ間のコピー&ペーストができなくなった場合の対処法
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
Windows版Google Driveが使用中と言われアンインストールできない場合
【Apache】サーバーに同時接続可能なクライアント数を調整する
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
【Linux】iconv/libiconvをソースコードからインストール
Googleファミリーリンクで子供の端末の現在地がエラーで取得できない場合
【ウマ娘】デイリーレースに雨の状態で出走するには
最新版のOpenSSH Serverにしたら公開鍵ログインできなくなった場合