ʍoɹɐɥsのブ口グ

ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็

Everex CE1200JにArchLinuxを入れる

f:id:sharow:20150128132731j:plain

引っ越した時に処分する予定だったノートPCを知人から譲り受けた。Everex CE1200Jという今や珍しいVIAのCPUを使ったノートPC。一時期はクラウドブックなんて名前で売り込んでたようだ。VIA C7-M 1.2GHz、メモリ512MB、HDD30GB。ちょっと厳しいスペックだがウィンドウシステム無しの、低スペックサーバのような用途なら問題ないだろう。

問題:インストーラー起動中に画面がブラックアウトする

VIAのビデオチップとLinuxの相性があまりよくないようで、一部のPCでブラックアウトするようだ。例えばこのCE1200Jがそう。それを避けるためにArchLinuxのインストーラーのブート時のオプション(カーネルパラメータ)にmodprobe.blacklist=viafbを追加する必要がある。

注意:先頭に入ってる謎パーティション

ディスクの先頭に謎のパーティションWindowsではない)がある。これを消すとブートローダー(grubなど)すら起動しなくなる。BIOSMBRを認識しなくなるらしい(MBRがNTLDRなのかGRUBなのかは問題ではない)。Windowsは消していいがこのパーティションは消さないほうがよい。ただし、HDDからブートしないのであれば問題ない。例えばArchLinuxのインストーラーのメニューにはBoot existing OSがあり、これを選べば普通にHDDのgrubが立ち上がる。あとはSDカードやUSBストレージからブートするようにするとか。いずれにしろ面倒なのでもし初期の謎パーティションがあるのなら消さないほうが良い。自分の場合はもう謎パーティションは消してしまった。付属のセットアップディスク(WindowsXP)があれば一度これでセットアップすることで謎パーティションも復元される。これもいっしょに譲ってもらったのに紛失してしまった(…)。

ハードウェアのチェック(任意)

なにしろ物が古い。

メモリはMemtest86+でチェック。これはたいていのLinuxディストリのISOに同封されてる。

HDDのセクタ破損が心配な場合はbadblocks -wsv /dev/sdaで破壊検査ができる。これはブロックデバイスを破壊(論理破壊)するので内容は全て消える。時間もかかる(数十時間)。もし非破壊検査をしたい場合はbadblocks -nsv /dev/sdaでできるようだ。自分の場合は謎パーティションも消してしまった後なので破壊検査の方を行った。

運悪く不良セクタが見つかってしまった場合は、badblocksが-o output_fileオプションで不良セクタ情報のファイルを吐き出せるので、それをfsckファイルシステムに登録することでそのセクタを避けるようにできるらしい。詳細はfsckのmanを参照(-l/-Lオプション)。・・・が、できればHDD自体を変えるか、別のメディアにインストールしたほうがいいでしょう。

ハードウェア情報

root@archiso ~ # cat /proc/cpuinfo
processor       : 0
vendor_id       : CentaurHauls
cpu family      : 6
model           : 13
model name      : VIA C7-M Processor 1200MHz
stepping        : 0
cpu MHz         : 1200.000
cache size      : 128 KB
physical id     : 0
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fdiv_bug        : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 1
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge cmov pat clflush acpi mmx fxsr sse sse2 tm nx pni est tm2 xtpr rng rng_en ace ace_en ace2 ace2_en phe phe_en pmm pmm_en
bugs            :
bogomips        : 2400.93
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 32 bits virtual
power management:
root@archiso ~ # lspci
00:00.0 Host bridge: VIA Technologies, Inc. CX700/VX700 Host Bridge (rev 10)
00:00.1 Host bridge: VIA Technologies, Inc. CX700/VX700 Host Bridge
00:00.2 Host bridge: VIA Technologies, Inc. CX700/VX700 Host Bridge
00:00.3 Host bridge: VIA Technologies, Inc. CX700/VX700 Host Bridge
00:00.4 Host bridge: VIA Technologies, Inc. CX700/VX700 Host Bridge
00:00.7 Host bridge: VIA Technologies, Inc. CX700/VX700 Host Bridge
00:01.0 PCI bridge: VIA Technologies, Inc. VT8237/VX700 PCI Bridge
00:0f.0 IDE interface: VIA Technologies, Inc. CX700/VX700 RAID Controller
00:10.0 USB controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 90)
00:10.1 USB controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 90)
00:10.2 USB controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 90)
00:10.4 USB controller: VIA Technologies, Inc. USB 2.0 (rev 90)
00:11.0 ISA bridge: VIA Technologies, Inc. CX700/VX700 PCI to ISA Bridge
00:11.7 Host bridge: VIA Technologies, Inc. CX700/VX700 Internal Module Bus
00:13.0 PCI bridge: VIA Technologies, Inc. CX700/VX700 Host Bridge
00:13.1 PCI bridge: VIA Technologies, Inc. CX700/VX700 PCI to PCI Bridge
01:00.0 VGA compatible controller: VIA Technologies, Inc. CX700/VX700 [S3 UniChrome Pro] (rev 03)
02:01.0 Audio device: VIA Technologies, Inc. VT8237A/VT8251 HDA Controller (rev 10)
03:09.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8100/8101L/8139 PCI Fast Ethernet Adapter (rev 10)
root@archiso ~ # lsusb
Bus 001 Device 006: ID 0bda:0158 Realtek Semiconductor Corp. USB 2.0 multicard reader
Bus 001 Device 008: ID 1cb6:6680 IdeaCom Technology Inc.
Bus 001 Device 007: ID 5986:0101 Acer, Inc USB2.0 Camera
Bus 001 Device 005: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 004: ID 0bda:8187 Realtek Semiconductor Corp. RTL8187 Wireless Adapter
Bus 001 Device 002: ID 0411:01dc BUFFALO INC. (formerly MelCo., Inc.) Ultra-Slim Portable DVD Writer (DVSM-PC58U2V)
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

BUFFALO INC. (formerly MelCo., Inc.) Ultra-Slim Portable DVD Writerはインストール時に使ったDVDドライブ、それ以外はCE1200J自体の装備。

セットアップ

特別な設定は特にないが、viafbのブラックアウトだけはセットアップ時に解消しておいたほうがよい。 /etc/default/grubにて、GRUB_CMDLINE_LINUX_DEFAULTブラックリストとしてviafb追加する。たしかmodprobe.dのblacklistではダメ。

GRUB_CMDLINE_LINUX_DEFAULT="quiet modprobe.blacklist=viafb"

WiFiを使う場合も特に追加パッケージ(ドライバ)は必要ない。

今回はbootパーティションext3、rootパーティションに安定して壊れるBtrfsを使ってみた。

ネットワークが調子悪いとき

スイッチングハブEthernet controllerの相性が悪いとパケットにdropやerrorが発生する。

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    RX: bytes  packets  errors  dropped overrun mcast
    34378314   659201   0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    34378314   659201   0       0       0       0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 1000
    link/ether 00:14:0b:45:a5:f9 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    249369660  459320   462     1       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    43563086   377583   0       0       0       0

ethtoolを入れて/etc/udev/rules.d/50-eth0-setting.rulesを作成。

SUBSYSTEM=="net", KERNEL=="eth0", ACTION=="add", RUN+="/usr/bin/ethtool -s eth0 speed 100 autoneg off duplex full"
SUBSYSTEM=="net", KERNEL=="eth0", ACTION=="add", RUN+="/usr/bin/ethtool -K eth0 gso off"
SUBSYSTEM=="net", KERNEL=="eth0", ACTION=="add", RUN+="/usr/bin/ethtool -K eth0 gro off"

一応autonegもoffにしてるが、原因はgso/groっぽい。

2/2 追記↓にて、有線LANは諦めてWiFiに以降した。

udevがエラー吐きまくる

$ journalctl -u systemd-udevd -f
Jan 28 11:49:03 ev systemd-udevd[176]: error: /dev/sdb: No medium found
Jan 28 11:49:03 ev systemd-udevd[176]: error: /dev/sdb: No medium found
Jan 28 11:49:03 ev systemd-udevd[176]: error: /dev/sdb: No medium found
Jan 28 11:49:54 ev systemd-udevd[176]: error: /dev/sdb: No medium found
Jan 28 11:49:54 ev systemd-udevd[176]: error: /dev/sdb: No medium found
Jan 28 11:49:54 ev systemd-udevd[176]: error: /dev/sdb: No medium found
...

これはうちのハードウェアの内蔵SDカードリーダーが壊れてるのかも?あるいは、SDカードリーダーがしょっぱい作りで常にカード装着状態になってるのか。ログが無駄に消費されるのでなんとかしようと思ったが、SDカードリーダーは使うかもしれないし、ログはjournaldで圧縮もcappedもされるので放置しても問題なさそう。おそらくこれもudevのrulesとかで無視するようできると思う。

ログは10秒ごとくらいに出るので10秒ごとにポーリングしてるのか、10秒でタイムアウトして再試行してるのか、どちらか? ・・・で、udevadmで見るとタイムアウトしてるっぽい感じだった。

  looking at parent device '/devices/pci0000:00/0000:00:10.4/usb2/2-6/2-6:1.0/host3/target3:0:0/3:0:0:0':
    KERNELS=="3:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{rev}=="1.00"
    ATTRS{type}=="0"
    ATTRS{scsi_level}=="0"
    ATTRS{model}=="Multi-Card      "
    ATTRS{state}=="running"
    ATTRS{queue_type}=="none"
    ATTRS{iodone_cnt}=="0x87ac"
    ATTRS{iorequest_cnt}=="0x87ac"
    ATTRS{device_busy}=="0"
    ATTRS{evt_capacity_change_reported}=="0"
    ATTRS{timeout}=="30"
    ATTRS{evt_media_change}=="0"
    ATTRS{max_sectors}=="240"
    ATTRS{ioerr_cnt}=="0x7c67"
    ATTRS{queue_depth}=="1"
    ATTRS{vendor}=="Generic-"
    ATTRS{evt_soft_threshold_reached}=="0"
    ATTRS{device_blocked}=="0"
    ATTRS{evt_mode_parameter_change_reported}=="0"
    ATTRS{evt_lun_change_reported}=="0"
    ATTRS{evt_inquiry_change_reported}=="0"
    ATTRS{iocounterbits}=="32"
    ATTRS{eh_timeout}=="10"

udevのrulesでeh_timeoutらへんをもっと長くすればログの消費量は減らせそう。 journalctl --disk-usageも16MBでたいしたことないのでとりあえずは放置。journald.confでサイズ上限も設定してるのでCPUさえ食わなければ問題ないだろう。

まとめ?

VIAのCPUという珍しい機種ですが、一応実験用Cassandraクラスタの1ノードとしてちゃんと動いてる。

また問題が起きたらここに追記する予定。

2/2 追記

有線LANがerror/drop発生しまくりで恐ろしいことになったので内蔵のWiFiを使うことにした。いまのところこちらの方が安定している。

2/3 追記

ちなみにこのPC、スペックにはどこもメモリ512MBと書いてあるのだが、Linuxからみると434MBしかない。Windowsならちゃんと認識されるのかな・・?