/dev/sda は /dev/sdz の次どうなるのか

答え: /dev/sdaa
・・・だけじゃ味気ないのでもう少し詳細を・・・

今時のLinuxはディスクをだいたいSCSI層で操作していて、つまりSCSIのdiskのドライバで上記が決まっている。具体的にはlinux/drivers/scsi/sd.c

このドライバのsd_format_disk_name()関数で名前が決まる。kernelから空いているindex番号をida_get_new()でもらってきて、その番号に対応する名前をsd_format_disk_name()で作る。一見するとわかりにくい関数だけど、こんな感じになる。
 sda, sdb, sdc, ... sdz, sdaa, sdab, sdac, ... sdaz, sdba, sdbb, ... sdzz, sdaaa, sdaab,
つまり、a-zの26文字を利用した26進数左詰。最大値は MAX_IDR_BITK できまるらしいので、intの最大値、物理的なディスクの限界があるので実質無限ですね。

ちなみになぜこんなことを気にしたかというと、FreeBSDだとda0,da1,da2 ... とディスクそのものに番号がつき、da0p1, da0p2, .. とパーティションはこれにさらに番号がつくという構成で、Linuxでもsd(sda)やhd(hda)以外はこの考え方なのに、なぜsdやhdはこうなのかと疑問に思ったからです・・・じゃなくて、ここを名前ベースでパーティション名かディスク名かを判別できるのかどうかで悩んだからで、ここはドライバ次第なので特にルールを決めれないという結論でした。

とはいっても、今更 /dev/sda がいきなり別の名前になってもみんな困るだろうからもう決め打ちでいいよね?ん?最近はudevやdevice-mapperだって?いやいや、udevやdevice-mapperを実装しようと思ったら結局迷うわけで。

さらにちなみに、適当に書かれてしまったコードのせいで /dev/sd[a-z][0-9] にしかヒットしないとか言う話はわりとあるようです。

このブログ記事について

このページは、らるるが2015年9月17日 23:56に書いたブログ記事です。

ひとつ前のブログ記事は「最近の出来事」です。

次のブログ記事は「setuid()の家族のメモ」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

ウェブページ

Powered by Movable Type 7.9.0