diary/Kojima

・libata

最近のLinuxでは従来のIDEドライバからlibataというSATA/PATAを統合したドラ イバへ移行しつつあるので,手元のマシンでlibataベースにしたらどうなるかを 試してみた.

 LinuxのIDEドライバは,Linuxの最初期のころからさまざまなハードウェアに
 個別に対応するようなコードを追加しながらインプリメントされてきて,
 Linuxが他のPC-Unixよりも多くのハードウェアに対応していて初期のユーザ
 の獲得に貢献した,という伝統的なコードだけど,その分複雑でメンテナンス
 が困難になってきたため,新しくlibataという実装が作成されたらしい.
 
 確かにLinuxのIDEドライバは,IDE経由でCDを使うためのATAPIが普及する前
 の,メーカ独自仕様の機能とかにも積極的に対応していたのだけど,その結果として
 コードは複雑になって,収拾が付かなくなってきていたらしい.
 
 cdrecordの作者あたりは,LinuxのIDEドライバは機能が中途半端(ATAPIコマ
 ンドがきちんと通らない)なのに開発者はそれを直す気がないらしい,と文句
 付けていたけど,そのあたりもこの新しいドライバで解決するのかな?

手元のIDE接続のみのマシンの起動時のログの該当部分

PCI: Setting latency timer of device 0000:00:1f.1 to 64
ata1: PATA max UDMA/100 cmd 0x1F0 ctl 0x3F6 bmdma 0x24A0 irq 14
ata2: PATA max UDMA/100 cmd 0x170 ctl 0x376 bmdma 0x24A8 irq 15
scsi0 : ata_piix
ata1.00: ATA-6, max UDMA/100, 361882080 sectors: LBA48 
ata1.00: ata1: dev 0 multi count 16
ata1.01: ATA-7, max UDMA/100, 312581808 sectors: LBA48 
ata1.01: ata1: dev 1 multi count 16
ata1.00: configured for UDMA/100
ata1.01: configured for UDMA/100
scsi1 : ata_piix
ata2.00: ATAPI, max UDMA/33
ata2.00: configured for UDMA/33
scsi 0:0:0:0: Direct-Access     ATA      IC35L180AVV207-1 V26O PQ: 0 ANSI: 5
SCSI device sda: 361882080 512-byte hdwr sectors (185284 MB)
sda: Write Protect is off
sda: Mode Sense: 00 3a 00 00
SCSI device sda: write cache: enabled, read cache: enabled, doesn't support DPO or FUA
SCSI device sda: 361882080 512-byte hdwr sectors (185284 MB)
sda: Write Protect is off
sda: Mode Sense: 00 3a 00 00
SCSI device sda: write cache: enabled, read cache: enabled, doesn't support DPO or FUA
 sda: sda1 sda2 sda3
sd 0:0:0:0: Attached scsi disk sda
scsi 0:0:1:0: Direct-Access     ATA      SAMSUNG SP1604N  TM10 PQ: 0 ANSI: 5
SCSI device sdb: 312581808 512-byte hdwr sectors (160042 MB)
sdb: Write Protect is off
...

これを見ると,従来は/dev/hdaとかで見えていたATA接続のHDDが ata_piix 経由でSCSIデバイスとして /dev/sda とかに見えるようになったことが分かりますね.ATAはprimaryがata1になって、ata1.00が従来の/dev/hda,ata1.01が/dev/hdb に、secondaryがata2になって、CDドライブと認識されている模様.ここには出てきてないけど,CDドライブは/dev/sr0に見えるみたい.

これくらいだと/dev/hd[abcde]が/dev/sd[abcde]に変るだけなのでそう悩むこ とはなさげだけど,ATAとSATAが混在する環境だと結構メンドくさい感じ.on boardでSATA接続ができる ASUS 8V(VIA VT8237)だと,こんな感じのログが出力されていた.

megaraid: 2.20.4.9 (Release Date: Sun Jul 16 12:27:22 EST 2006)
sata_via 0000:00:0f.0: version 2.0
ACPI: PCI Interrupt 0000:00:0f.0[B] -> GSI 20 (level, low) -> IRQ 16
sata_via 0000:00:0f.0: routed to hard irq line 10
ata1: SATA max UDMA/133 cmd 0xD000 ctl 0xC802 bmdma 0xB800 irq 16
ata2: SATA max UDMA/133 cmd 0xC400 ctl 0xC002 bmdma 0xB808 irq 16
scsi0 : sata_via
ata1: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
ATA: abnormal status 0x7F on port 0xD007
ATA: abnormal status 0x7F on port 0xD007
ata1.00: ATA-7, max UDMA/133, 625142448 sectors: LBA48 NCQ (depth 0/32)
ata1.00: ata1: dev 0 multi count 16
ata1.00: configured for UDMA/133
scsi1 : sata_via
ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
ATA: abnormal status 0x7F on port 0xC407
ATA: abnormal status 0x7F on port 0xC407
ata2.00: ATA-7, max UDMA/133, 625142448 sectors: LBA48 NCQ (depth 0/32)
ata2.00: ata2: dev 0 multi count 16
ata2.00: configured for UDMA/133
scsi 0:0:0:0: Direct-Access     ATA      ST3320620AS      3.AA PQ: 0 ANSI: 5
SCSI device sda: 625142448 512-byte hdwr sectors (320073 MB)
sda: Write Protect is off
sda: Mode Sense: 00 3a 00 00
SCSI device sda: write cache: enabled, read cache: enabled, doesn't support DPO or FUA
SCSI device sda: 625142448 512-byte hdwr sectors (320073 MB)
sda: Write Protect is off
sda: Mode Sense: 00 3a 00 00
SCSI device sda: write cache: enabled, read cache: enabled, doesn't support DPO or FUA
 sda: sda1
sd 0:0:0:0: Attached scsi disk sda
scsi 1:0:0:0: Direct-Access     ATA      Hitachi HDT72503 V54O PQ: 0 ANSI: 5
SCSI device sdb: 625142448 512-byte hdwr sectors (320073 MB)
sdb: Write Protect is off
sdb: Mode Sense: 00 3a 00 00
SCSI device sdb: write cache: enabled, read cache: enabled, doesn't support DPO or FUA
SCSI device sdb: 625142448 512-byte hdwr sectors (320073 MB)
sdb: Write Protect is off
sdb: Mode Sense: 00 3a 00 00
SCSI device sdb: write cache: enabled, read cache: enabled, doesn't support DPO or FUA
 sdb: sdb1
sd 1:0:0:0: Attached scsi disk sdb
pata_via 0000:00:0f.1: version 0.2.1
ACPI: PCI Interrupt 0000:00:0f.1[A] -> GSI 20 (level, low) -> IRQ 16
ata3: PATA max UDMA/133 cmd 0x1F0 ctl 0x3F6 bmdma 0xFC00 irq 14
ata4: PATA max UDMA/133 cmd 0x170 ctl 0x376 bmdma 0xFC08 irq 15
scsi2 : pata_via
ata3.00: ATA-5, max UDMA/100, 156301488 sectors: LBA 
ata3.00: ata3: dev 0 multi count 16
ata3.00: configured for UDMA/100
scsi3 : pata_via
ata4.00: ATAPI, max UDMA/33
ata4.00: configured for UDMA/33
scsi 2:0:0:0: Direct-Access     ATA      ST380021A        3.75 PQ: 0 ANSI: 5
SCSI device sdc: 156301488 512-byte hdwr sectors (80026 MB)
sdc: Write Protect is off
sdc: Mode Sense: 00 3a 00 00
SCSI device sdc: write cache: enabled, read cache: enabled, doesn't support DPO or FUA
SCSI device sdc: 156301488 512-byte hdwr sectors (80026 MB)
sdc: Write Protect is off
sdc: Mode Sense: 00 3a 00 00
SCSI device sdc: write cache: enabled, read cache: enabled, doesn't support DPO or FUA
sdc: sdc1 sdc2 sdc3 sdc4
sd 2:0:0:0: Attached scsi disk sdc
scsi 3:0:0:0: CD-ROM            PIONEER  DVD/CDRW DCR-111 1.26 PQ: 0 ANSI: 5
sr0: scsi3-mmc drive: 40x/94x writer cd/rw xa/form2 cdda tray
Uniform CD-ROM driver Revision: 3.20

これだとSATA接続のデバイスが先に認識されてata1,ata2になって、/dev/sda,/dev/sdbが割りあてられ、 PATA接続はata3以降で/dev/sdcに,/dev/hdcのCDドライブが/dev/sr0になっている感じ.

ちなみに既存の環境への上書きインストールとかもやってみたけど,grubが認識するHDDの順番は 従来通りATAPI->SATAなので,/dev/hda1は/boot/grub.confのドライブ指定だと(hd0,0)になるけど, カーネルパラメータとしてroot partitionを渡す際は/dev/sdc1とかにしないといけないので, かなり紛らわしい気がする.

イジった感じ,libataは最近のサウスブリッジチップには対応できてそうなので,後は古めのマザーボードとか 拡張IDEカードの類いの対応状況次第だろうなぁ..



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-12-17 (金) 16:35:41