以前に消去前の 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 メモリを包装するビニール袋との戦いでした。
0 件のコメント:
コメントを投稿