SadServers解説#23 "Kihei": Surely Not Another Disk Space Scenario
問題概要
シナリオ
まさか、またディスク容量の問題ではないだろうか
問題詳細
/home/admin/kihei
プログラムがあります。このプログラム実行が成功するように必要な変更を行ってください。ただし、/home/admin/datafile
ファイルを削除しないようにしてください。
解決判定
問題が解決したら、Check My Solution
ボタンをクリックしてください。
解答が正解かどうか、コマンドプロンプト上で確認することも可能です。次のコマンドを実行して、以下と同じ出力が得られた場合は正解です。
$ /home/admin/kihei
Done.
問題解決の方針
【表示する】
プログラムが実行できないとのことなので、まずはプログラムを実行してみて、分析してみましょう。
解決の手順を表示する
- プログラムを実行する
- 出力結果に応じて対処する
- どうしても分からなければ、ログファイルを確認する
ヒント
一部、SadServers公式のヒントを改変しています。
ヒント1
/home/admin/kihei
プログラムがなぜ失敗してしまうのか、デバッグモードで確認します。デバッグモードの引数は、help
を見て確認します。
実行コマンド
$ ./kihei -h
Usage: ./kihei [options]
-h Display help
-help
Display help
-v Verbose mode (print extra info)
-verbose
Verbose mode (print extra info)
$
$ ./kihei -v
Creating file /home/admin/data/newdatafile with size 1.5GB...
panic: exit status 1
goroutine 1 [running]:
main.main()
./main.go:64 +0x47d
デバッグモードで実行したときの、出力の最初の行に注目してください。/home/admin/data/
というディレクトリに1.5GBのnewdatafile
というファイルを作成しようとしており、その直後に終了コードが1(=失敗)となってしまっています。
ヒント2
ファイルを作成するときに失敗してしまう原因はいくつかありますが、まずはディスクに十分な空き容量があるか確認してみましょう。
実行コマンド
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 217M 0 217M 0% /dev
tmpfs 46M 368K 46M 1% /run
/dev/nvme0n1p1 7.7G 6.1G 1.2G 84% /
tmpfs 228M 12K 228M 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/nvme0n1p15 124M 5.9M 118M 5% /boot/efi
kiheiプログラムがファイルを保存しようとしているルートボリュームには、1.2GBの空き容量しかないようです。
ヒント3
ルートボリュームのファイルを削除して空き容量を確保しても良いのですが、もしも使われていないボリュームがあればそちらを使う方が好ましいですね。現在使用可能なブロックデバイスを確認しましょう。
実行コマンド
$ lsblk -l
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 8G 0 disk
nvme2n1 259:1 0 1G 0 disk
nvme1n1 259:2 0 1G 0 disk
nvme0n1p1 259:3 0 7.9G 0 part /
nvme0n1p14 259:4 0 3M 0 part
nvme0n1p15 259:5 0 124M 0 part /boot/efi
nvme1n1
、nvme2n1
の二つのボリュームが、現在使われていないようです。
しかし、各ボリュームの容量はそれぞれ1GBで、どちらかを/home/damin/data
にマウントしたとしても、今回作成したいファイルの容量である1.5GBには容量が足りません。
どうしたものでしょうか…
ヒント 4
二つの物理ボリュームを一つの論理ボリュームとして再構成すれば、2GBのボリュームを作ることができます。
論理ボリュームを作成しましょう。
実行コマンド(論理ボリュームを作成する一通りのコマンドが一度に表示されます)
$ sudo pvcreate /dev/nvme1n1 /dev/nvme2n1
Physical volume "/dev/nvme1n1" successfully created.
Physical volume "/dev/nvme2n1" successfully created.
$ sudo vgcreate vg /dev/nvme1n1 /dev/nvme2n1
Volume group "vg" successfully created
$ sudo lvcreate -n lv -l 100%FREE vg
Logical volume "lv" created.
$ sudo mkfs.ext4 /dev/vg/lv
mke2fs 1.46.2 (28-Feb-2021)
Creating filesystem with 522240 4k blocks and 130560 inodes
Filesystem UUID: 380eb4d0-f742-462c-9973-a051341db7e3
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
新しい論理ボリュームが作成できたようです。
ヒント5
作成した論理ボリュームを/home/admin/data
ディレクトリにマウントし、プログラムがファイルを作成できるように/home/admin/data
ディレクトリの所有者をadmin
にしましょう。
実行コマンド
$ sudo mount /dev/vg/lv /home/admin/data
$ sudo chown -R admin: /home/admin/data
$ ./kihei
Done.
/home/admin/kihei
プログラムが実行できるようになりました!
「いきなり問題を解き始めても調べるばかりになってしまう…」 「やりたいことが分かっても、コマンドが分からない…」 という方は、下記の記事でLinuxのコマンドを復習してから、SadServersの問題に取り掛かってみてはいかがでしょうか。
問題一覧はこちら
Discussion