📀

SadServers解説#23 "Kihei": Surely Not Another Disk Space Scenario

2024/07/20に公開

https://ja.wikipedia.org/wiki/キヘイ

問題概要

シナリオ

まさか、またディスク容量の問題ではないだろうか

問題詳細

/home/admin/kiheiプログラムがあります。このプログラム実行が成功するように必要な変更を行ってください。ただし、/home/admin/datafileファイルを削除しないようにしてください。

解決判定

問題が解決したら、Check My Solutionボタンをクリックしてください。

解答が正解かどうか、コマンドプロンプト上で確認することも可能です。次のコマンドを実行して、以下と同じ出力が得られた場合は正解です。

$ /home/admin/kihei
Done.

 

問題解決の方針

【表示する】

プログラムが実行できないとのことなので、まずはプログラムを実行してみて、分析してみましょう。

解決の手順を表示する
  1. プログラムを実行する
  2. 出力結果に応じて対処する
  3. どうしても分からなければ、ログファイルを確認する

 

ヒント

一部、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

nvme1n1nvme2n1の二つのボリュームが、現在使われていないようです。
しかし、各ボリュームの容量はそれぞれ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の問題に取り掛かってみてはいかがでしょうか。
https://zenn.dev/comf_nakamura/articles/linux_command

問題一覧はこちら

https://zenn.dev/comf_nakamura/articles/sadservers_sitemap

Discussion