Linux で、何らかの理由でデバイスファイル(スペシャルファイル)が作られなかった場合

※ このエントリは、はてなグループ終了に伴う、サブブログからの引越エントリ(2010/12)です。
※ 情報が古い可能性もありますので、ご留意ください。



fdisk でのパーティションとしては見えているのに、/dev 以下にデバイスファイル(スペシャルファイル)が無い場合の話。

# fdisk -l

~~~ 省略 ~~~

Disk /dev/sdb: 145.9 GB, 145999527936 bytes
255 heads, 63 sectors/track, 17750 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1          65      522081   83  Linux
/dev/sdb2              66         326     2096482+  82  Linux swap / Solaris
/dev/sdb3             327        4243    31457053   83  Linux
/dev/sdb4            4243       17750   108501227   83  Linux

↑fdiskでは、/dev/sdb4が見えているが、、、

# ll /dev/sd*
brw-r----- 1 root disk 8,  0 12月 28  2010 /dev/sda
brw-r----- 1 root disk 8,  1 12月 28  2010 /dev/sda1
brw-r----- 1 root disk 8, 16 12月 28 11:52 /dev/sdb
brw-r----- 1 root disk 8, 17 12月 28 11:48 /dev/sdb1
brw-r----- 1 root disk 8, 18 12月 28  2010 /dev/sdb2
brw-r----- 1 root disk 8, 19 12月 28 11:48 /dev/sdb3

"ls -l" 等では、デバイスファイル(スペシャルファイル)が存在していない。
というわけで、"mknod" コマンドでデバイスファイルを作成する。

# mknod /dev/sdb4 b 8 20

オプションでは "b" を指定すると、ブロックデバイス用のスペシャルファイルが作成される。
("ls -l" で、各ファイルの先頭に "b" がついているもの。)

"b" に続けて、NAMEとTYPEを指定しますが、"ls -l" の結果を参考に揃えるように付け足す。

最後に、忘れずにオーナー (グループ) やパーミッションを、他のデバイスファイルと揃えてやればOK。

# ll /dev/sd*
# ll /dev/sd*
# ll /dev/sd*
brw-r----- 1 root disk 8,  0 12月 28  2010 /dev/sda
brw-r----- 1 root disk 8,  1 12月 28  2010 /dev/sda1
brw-r----- 1 root disk 8, 16 12月 28 11:52 /dev/sdb
brw-r----- 1 root disk 8, 17 12月 28 11:48 /dev/sdb1
brw-r----- 1 root disk 8, 18 12月 28  2010 /dev/sdb2
brw-r----- 1 root disk 8, 19 12月 28 11:48 /dev/sdb3
brw-r----- 1 root disk 8, 20 12月 28 14:48 /dev/sdb4

この通り。

参考

# mknod --help
Usage: mknod [OPTION]... NAME TYPE [MAJOR MINOR]
与えられた TYPE のスペシャルファイル NAME を作成する。

長いオプションに必須の引数は短いオプションにも必須です.
  -m, --mode=MODE   アクセス権を a=rw - umask ではなく(chmod の様に)指定する
  -Z, --context=CONTEXT   set security context (quoted string)
      --help     この使い方を表示して終了
      --version  バージョン情報を表示して終了

Both MAJOR and MINOR must be specified when TYPE is b, c, or u, and they
must be omitted when TYPE is p.  If MAJOR or MINOR begins with 0x or 0X,
it is interpreted as hexadecimal; otherwise, if it begins with 0, as octal;
otherwise, as decimal.  TYPE may be:

  b      create a block (buffered) special file
  c, u   create a character (unbuffered) special file
  p      create a FIFO