Linuxでのディスク装置の扱いはWindowsのそれとは大きくことなり、ドライブという概念はなく、複数のディスク装置があっても一つのファイルシステムとして扱う。今回はUSBメモリを使ってパーティションの操作、フォーマットの方法について学びます。
LinuxはCD、DVD、USBメモリなどのディスク装置を接続すると自動的にマウントされる。この機能をオートマウント機能といい、autofsというサービスで実現している。このサービスが止まっているときは手動でマウントしなければならない。
autofsは/etc/auto.masterやLinuxのカーネルに組み込まれているファイルシステムを自動的にマウントするサービスである。
LinuxではHDD、CDなどの装置は/dev以下にある特別なファイル(デバイスファイル)を通してファイルと同じようなに操作できる仕組みになっている。
デバイスファイルにはバッファを使ってアクセスするブロックデバイスとバッファを使わないキャラクタデバイスの二種類がある。前者はHDDなどのディスク装置、後者はキーボードやマウスなどの装置が割り当てられる。ディレクトリ/devをlsコマンドで詳細表示したとき、それぞれの装置はbおよびcと表示される。
lrwxrwxrwx 1 root root 13 12月 8 14:27 MAKEDEV -> /sbin/MAKEDEV drwx------ 2 root root 80 12月 8 2008 VolGroup00 lrwxrwxrwx 1 root root 4 12月 8 14:27 X0R -> null .... lrwxrwxrwx 1 root root 3 12月 8 14:27 cdrom -> hda crw------- 1 sakabe root 5, 1 12月 8 14:28 console .... brw------- 1 sakabe disk 3, 0 12月 8 14:27 hda .... crw-rw-rw- 1 root root 1, 3 12月 8 14:27 null .... brw-r----- 1 root disk 8, 0 12月 8 2008 sda brw-r----- 1 root disk 8, 1 12月 8 14:28 sda1 .... crw-rw---- 1 root root 4, 0 12月 8 2008 tty0 crw------- 1 root root 4, 1 12月 8 14:28 tty1 crw-rw---- 1 root tty 4, 10 12月 8 2008 tty10 .... crw-rw---- 1 root uucp 4, 64 12月 8 14:28 ttyS0 .... cr--r--r-- 1 root root 1, 9 12月 8 14:28 urandom .... crw-rw-rw- 1 root root 1, 5 12月 8 14:27 zero
HDDのうち、IDEはhda、hdbなどと、SCSIディスク、SBメモリ、SATAなどはsda、sdbといったデバイスファイル名が割り当てられる。aが一台目、bが二台目のディスクを意味する。
ディスクのパーティションはデバイスファイル名の番号を付けて表す。例えば、一台目のIDE HDDの最初のパーティションはhda1と表記する。
USBメモリなど識別可能なデバイスを接続したとき、Linuxのカーネルは/var/log/messagesに次のようなメッセージを書き込むのでこのメッセージを読めば、Linuxがその装置にどのデバイスファイルを使い、どこにオートマウントしたかが分かる。
Dec 10 17:13:41 beta kernel: usb 1-1: new high speed USB device using \ ehci_hcd and address 4 Dec 10 17:13:42 beta kernel: usb 1-1: configuration #1 chosen from 1 choice Dec 10 17:13:42 beta kernel: scsi3 : SCSI emulation for USB Mass Storage \ devices Dec 10 17:13:48 beta kernel: Vendor: GH Model: PicoR Rev: 1.01 Dec 10 17:13:48 beta kernel: Type: Direct-Access ANSI SCSI revision: 02 Dec 10 17:13:48 beta kernel: SCSI device sdb: 1015232 512-byte hdwr sectors \ (520 MB) Dec 10 17:13:48 beta kernel: sdb: Write Protect is off Dec 10 17:13:48 beta kernel: sdb: assuming drive cache: write through Dec 10 17:13:48 beta kernel: SCSI device sdb: 1015232 512-byte hdwr sectors \ (520 MB) Dec 10 17:13:48 beta kernel: sdb: Write Protect is off Dec 10 17:13:48 beta kernel: sdb: assuming drive cache: write through Dec 10 17:13:48 beta kernel: sdb: sdb1 Dec 10 17:13:48 beta kernel: sd 3:0:0:0: Attached scsi removable disk sdb Dec 10 17:13:48 beta kernel: sd 3:0:0:0: Attached scsi generic sg1 type 0 Dec 10 17:13:50 beta hald: mounted /dev/sdb1 on behalf of uid 500
ディスク装置をLinuxのフィイルシステムに組み込むことをマウント、マウントされているデバイスを取り外すことをアンマウントという。コマンドはそれぞれmount、umountを使う。
ディスク全体、あるいは分割した個々の領域のことをパーティションといい、fdiskコマンドで操作できる。パーティションには基本パーティションと拡張パーティションの二種類があり、一つのディスクに作成できるパーティションは基本パーティションは4つまで、拡張パーティションは1つまで作成できる。これは古いIBM-PCの制限が残っているからである。4つ以上のパーティションを作るときは拡張パーティションに論理パーティションを作る。
Linuxでは様々なパーティションタイプを指定できる。Linuxでは通常のファイルシステムにはext3を、仮想メモリにはswapを使う。
パーティション操作にはfdiskコマンドを使う。
# fdisk -l /dev/sdb <- /dev/sdbのパーティションを表示する # fdisk /dev/sdb <- /dev/sdbのパーティションを操作する
fdiskのサブコマンドは次の通り。fdiskコマンドで操作したパーティションはwコマンドを実行するまでディスクには書き込まれない。
コマンド | 意味 |
p | パーティション表示 |
n | 新規パーティション作成 |
t | パーティションタイプの指定 |
d | パーティション削除 |
v | パーティション情報の検証 |
w | パーティション書き込み |
/dev/sdbのディスクのパーティション操作例を示す。
コマンド (m でヘルプ): p Disk /dev/sdb: 125 MB, 125337600 bytes 255 heads, 63 sectors/track, 15 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes デバイス Boot Start End Blocks Id System /dev/sdb1 1 15 120456 83 Linux コマンド (m でヘルプ): d <- パーティション削除 Selected partition 1 コマンド (m でヘルプ): n <- パーティション作成 コマンドアクション e 拡張 p 基本領域 (1-4) p <- 基本領域指定 領域番号 (1-4): 1 <- 領域番号1 最初 シリンダ (1-15, default 1): Using default value 1 終点 シリンダ または +サイズ または +サイズM または +サイズK (1-15, default 15): Using default value 15 コマンド (m でヘルプ): t <- パーティションタイプ指定 Selected partition 1 16進数コード (L コマンドでコードリスト表示): b 領域のシステムタイプを 1 から b (W95 FAT32) に変更しました コマンド (m でヘルプ): v <- パーティション情報の検証 3887 unallocated sectors コマンド (m でヘルプ): w <- パーティション情報の書き込み 領域テーブルは交換されました!
パーティションを作成したディスクはフォーマットしないと使えない。Linuxでディスクをフォーマットするコマンドはmkfsである。
ファイルシステムに矛盾がないかをチェック・修復する時はfsckコマンドを使う。このコマンドはファイルシステムをアンマウントしているときに使う。
USBメモリを使い、Linuxにディスクを増設したときのプラグアンドプレイ動作を確認、そのディスクのパーティションを操作する。