👻

/dev/null (や他のデバイスファイル)を別の名前で参照する方法

2023/02/15に公開

ネタにマジレスするよ。

https://twitter.com/aws_TakS07/status/1625348073483567104

まあ、一回は断ればいいと思いますけど、ぼったくり料金をいただいて対応することもできますね。
とりあえず3つの方法を思いつきました。

mknod でデバイスファイルを作成する

/dev/null はデバイスファイルです。

$ ls -l /dev/null
crw-rw-rw- 1 root root 1, 3 Feb 10 22:49 /dev/null

Linuxカーネルからは char device major numer = 1, minor number = 3 として認識されています。
これと同じ情報でノードを作ればよいです。

$ sudo mkdir /stg1
$ sudo mknod -m 666 /stg1/null c 1 3
$ ls -l /stg1/null
crw-rw-rw- 1 root root 1, 3 Feb 15 13:15 /stg1/null

シンボリックリンクを張る

こちらがわかりやすくておすすめ。

$ sudo mkdir /stg2
$ sudo ln -s /dev/null /stg2/null
$ ls -l /stg2/null
lrwxrwxrwx 1 root root 9 Feb 15 13:17 /stg2/null -> /dev/null

/dev/null は名前が固定されているので簡単ですが、/dev/video2 など、状況によってファイル名が変わるものに対してシンボリックリンクをつくるには、udevを使います。詳しくはudevで検索してください。

/dev をまるごと別のディレクトリにmountする

$ sudo mkdir /stg3
$ sudo mount -B /dev /stg3
$ ls -l /stg3/null
crw-rw-rw- 1 root root 1, 3 Feb 10 22:49 /stg3/null
$ ls -l /stg3 |head
total 0
crw-r--r--  1 root root     10, 235 Feb 10 22:49 autofs
drwxr-xr-x  2 root root         540 Feb 15 12:30 block
drwxr-xr-x  2 root root          80 Feb 10 22:49 bsg
crw-------  1 root root     10, 234 Feb 10 22:49 btrfs-control
drwxr-xr-x  3 root root          60 Feb 10 22:49 bus
drwxr-xr-x  2 root root        4560 Feb 11 19:56 char
crw--w----  1 root tty       5,   1 Feb 10 22:49 console
lrwxrwxrwx  1 root root          11 Feb 10 22:49 core -> /proc/kcore
drwxr-xr-x  6 root root         140 Feb 11 19:56 cpu

/stg3 の下に /dev のファイルが丸ごと見えます。

最後に

いずれの方法も元の/dev/null はそのまま使い続けることができます。
手作業で動作を確認したら、Ansibleなどの設定ファイルも更新するのを忘れずに。

Discussion