2012年3月12日月曜日

OpenIndiana でイーサネットデバイスのリストを表示する

zpool を旧ディスクから新ディスクにコピーしたついでに OpenIndiana へ移行しようとしたファイルサーバ、イーサネットのデバイス名が ifconfig -a で表示されてこないのでしばらく放置してあったのをやっとこネットワークに繋ぎました。


# dladm show-phys
LINK         MEDIA                STATE      SPEED  DUPLEX    DEVICE
e1000g0      Ethernet             up         1000   full      e1000g0
e1000g1      Ethernet             unknown    0      half      e1000g1



まさか Intel の NIC でドライバが足りてないなんてことはないよなぁとか思ったりデバイス名なんだろうとか思っていたけど dladm show-phys で出てくるんですね。ってことで /etc/hostname.e1000g0 を作ったりとか色々して作業完了。


リゾルバ設定で /etc/nsswitch.conf のフルパスを思い出すのにちょっと時間かかった。もう歳ですね……。


2012年3月10日土曜日

大量のUSBフラッシュメモリを再フォーマットする

MacOS X上で100個オーバーなUSBメモリの内容をガンガン消したかったのでスクリプトを書きました。
 


以前に消去前の USB メモリ(恐らくイメージを事前作成し展開)のデータを dd で読み取って split して md5 で一通りチェックしたら最初の 30MB 分ぐらいにデータが入っていることがわかったので、まず dd でゼロクリアします。その後 MacOS X 上で FAT16 のファイルシステムを作成し、終わったらイジェクトします。

usbdisk_format.sh
#!/bin/sh

DISK=$1
if [ "x$DISK" == "x" ]; then
        echo Usage: $0 /dev/disk1
        exit 1;
fi

diskutil unmountDisk $DISK 2>&1 > /dev/null
if [ $? -ne 0 ]; then
        echo $DISK: Unmount failure.
fi
mount | grep -q "$DISK"
if [ $? -eq 0 ]; then
        echo $DISK: Still mounting. dont format this disk.
        exit 0
fi


sudo dd if=/dev/zero of=$DISK bs=1m count=30 2>&1 > /dev/null
if [ $? -ne 0 ]; then
        echo $DISK: dd failure.
fi


diskutil partitionDisk $DISK  MBR 'MS-DOS FAT16' FUSION-IO 100% 2>&1 > /dev/null
if [ $? -ne 0 ]; then
        echo $DISK: format failure.
        exit 1
fi


diskutil unmountDisk $DISK 2>&1 > /dev/null
if [ $? -ne 0 ]; then
        echo $DISK: Unmount failure.
fi


exit 0


このスクリプトは引数して /dev/diskX といったデバイス名をとりますが、毎回これを指定するのは面倒なので、 USBメモリを見つけて上記スクリプトを叩くスクリプトを作りました。
このスクリプトは /dev/disk* ファイルを見つけて、そのデバイスが目的のブロックデバイスであるか、ブロックデバイスの容量やデバイス名などをベースに判断し、条件にあうデバイスは上記のスクリプトを並列実行し初期化します。

usb_batch.sh

#!/bin/sh


test_fusion_usb() {
        DISK=$1
        diskutil info $DISK | grep -q 'USB DISK Media' 
        if [ $? -ne 0 ]; then
                echo SKIP_1
                return 1;
        fi
        diskutil info $DISK | grep -q '1.0 GB (1038090240 Bytes)' 
        if [ $? -ne 0 ]; then
                echo SKIP_2
                return 1;
        fi


        # echo $DISK is USB
        return 0;
}


DISKS=`ls -1 /dev/disk[0-9] /dev/dsk[0-9][0-9]`


for d in $DISKS; do
        test_fusion_usb $d
        if [ $? -eq 0 ]; then
                echo Clearing $d
                sh usbdisk_format.sh $d &
        fi
done

あとは USB メモリを MacBook Air に刺しまくってスクリプトを実行するだけ・・・・!!





MacBook Air が落ちました。バスパワーが足りなくて、安定して並列初期化できるのは 4 枚ぐらいまでのようです。また一番大変なのは USB メモリを包装するビニール袋との戦いでした。