d.sunnyone.org
sunnyone.org

ページ

2012-03-12

Linuxのddで処理状況を定期的に出力する

SheevaPlug につないでいたSDカード(16GB)が壊れてしまったっぽいので、まずはddの丸ごとコピーで復旧を試みる(べつに再インストールしても良いのだが)

# dd if=/dev/sdb of=siva1.bin bs=4096 conv=sync,noerror
これだと進行状況が見えないが、LinuxのddはSIGUSR1をぶつければ終了時に出てくるアレが表示される。なので、whileで送り続ければ、一定間隔で状態を表示できる。
# while true; do sudo kill -USR1 [PID] ; sleep 10; done
しばらくの間10秒間ごとに進行状況を表示していたが・・・
dd: reading `/dev/sdb': Input/output error
1714494+126135 records in
1840629+0 records out
7539216384 bytes (7.5 GB) copied, 674.537 s, 11.2 MB/s
dd: reading `/dev/sdb': Input/output error
1714494+126136 records in
1840630+0 records out
7539220480 bytes (7.5 GB) copied, 674.537 s, 11.2 MB/s
dd: reading `/dev/sdb': Input/output error
1714494+126137 records in
1840631+0 records out
7539224576 bytes (7.5 GB) copied, 674.537 s, 11.2 MB/s

 ・・・(以下最後まで)
だめだー。



よく知らないARMデバイスのU-Boot環境変数を読む

U-Bootはブートローダ。x86では似たようなことを違うUIでBIOSが担うのであまりピンとこないが、SPARCを使ったことある人なら、OpenBootのプロンプトを思い浮かべてもらえばピンとくると思う。

U-Bootの設定情報を維持している、U-Bootの環境変数を見るには、U-Bootを実行している間にprintenvすれば表示できるのだが、シリアルにアクセスできないデバイスを持っている人もいるはず。そこで、ここではOS(Linux)上から見る方法を取り上げる。

【正攻法】
fw_printenvというコマンドがあるので、これを使う。
1. インストール
  # apt-get install uboot-envtools

2. 設定
どこからか機器依存なデバイス情報を拾ってきて、/etc/fw_env.configに書く。
以下、SheevaPlugの場合
 /dev/mtd0 0xa0000 0x20000 0x20000
ちなみに0xa0000でない場合もあるらしい。

3. 実行 
$ sudo fw_printenv
CASset=min
MALLOC_len=1
autoload=no
baudrate=115200

~~~
 簡単。

【邪道な方法】
アドレス情報がわからなかったり、ソフトをインストールできないデバイスを持っている人もいると思う。そういう場合でも、読むだけならできる。
 
1. mtdデバイスを探し出す
$ ls  /dev/mtd*
/dev/mtd0    /dev/mtd1    /dev/mtd2    /dev/mtdblock0  /dev/mtdblock2
/dev/mtd0ro  /dev/mtd1ro  /dev/mtd2ro  /dev/mtdblock1
 mtd0~mtd2があるようなので、mtd0でチャレンジ。

2. mtdデバイスの中身を吸い出す
$ dd if=/dev/mtd0 of=~/mtd0.bin

3. odで開始アドレスと終了アドレスを探し出す
$ od -Ax -c mtd0.bin | less
これで、「c   o   n   s」など、環境変数に設定されていそうな値を適当に入力して、値が入っている場所を探し出す。


終わりは\0が続いているだけなので簡単。

4. \0区切りで分割する
見ての通り、\0で区切られてASCII文字が格納されているだけなので、開始アドレス~終了アドレスのデータを取り出して、\0で分割して出力してあげれば終わり。
$ ruby -e 'ARGF.seek(0xa0004); buf=ARGF.read(0xc0000-0xa0004); puts buf.split(/\0/)' mtd0.bin
CASset=min
MALLOC_len=1
autoload=no
baudrate=115200
bootargs=console=ttyS

 ~~~

CRCがあるようなので、間違っても書こうとはしないこと。

2012-03-11

LinuxでAdvanced Format Technology (AFT) な3TB HDDのパーティションを切る

切ってしまったあとに、こういうことを気にしないといけないと気づいたが、partedがどうもよろしくやってくれたらしい。

<切り方>
# parted /dev/sdb mklabel gpt
# parted /dev/sdb mkpart primary 1 1026 ←partedのデフォルトは単位MB
# parted /dev/sdb mkpart primary 1026 17410
# parted /dev/sdb mkpart primary 17410 17411
# parted /dev/sdb mkpart primary 17411 17412
# parted /dev/sdb mkpart primary linux-swap 17412 18436
# parted /dev/sdb mkpart primary 18436 274436
# parted /dev/sdb mkpart primary 274436 -1s
Warning: You requested a partition from 274GB to 3001GB.                
The closest location we can manage is 274GB to 3001GB.
Is this still acceptable to you?
Yes/No? yes
 <確認>
# parted /dev/sdb "unit s" print
Model: WDC WD30 EZRX-00MMMB0 (scsi)
Disk /dev/sdb: 5860533168s
Sector size (logical/physical): 512B/512B  ←4096に見えているわけではなさそうだが・・・
Partition Table: gpt

Number  Start       End          Size         File system     Name     Flags
 1      2048s       2002943s     2000896s     ext3            primary      ←2048
スタートなのでOK(2048 % 8 = 0)
 2      2002944s    34002943s    32000000s    ext4            primary  ←2002944 % 8 = 0
 3      34002944s   34004991s    2048s                        primary       ←以下同様
 4      34004992s   34007039s    2048s                        primary
 5      34007040s   36007935s    2000896s     linux-swap(v1)  primary
 6      36007936s   536008703s   500000768s   ext4            primary
 7      536008704s  5860533134s  5324524431s  ext4            primary
 ちなみにpartedのバージョン(Debian/squeeze/armel):
$ dpkg -l parted | grep "^ii"
ii  parted                           2.3-5                        The GNU Parted disk partition resizing program

2012-02-26

Dynabook AZにUbuntu 11.10をインストール

だいぶ前になるが、Dynabook AZを買ってきてUbuntu 11.10をインストールしたので、手順を記しておく。

<準備するもの>
  • Dynabook AZ
  • USB メモリ
  • mini-USBケーブル
  • フラッシュ書き込みを行うためのUbuntu (x86) (Windowsでもいいらしい)

<手順>
1.  ダウンロード
イメージファイルを落とす
$ wget http://cdimage.ubuntu.com/releases/11.10/release/ubuntu-11.10-preinstalled-desktop-armel+ac100.bootimg
$ wget http://cdimage.ubuntu.com/releases/11.10/release/ubuntu-11.10-preinstalled-desktop-armel+ac100.tar.gz
http://cdimage.ubuntu.com/releases/11.10/release/MD5SUMS とmd5sumコマンドを実行して比較する。

 2. nvflashインストール
flashを読み書きするためのプログラム、nvflashをインストールする。

http://share.grandou.net/debian/nvflash/nvflash_20110628-2_all.deb をダウンロード(なぜかwgetできない)して、以下のコマンドを実行する。
# sudo dpkg -i nvflash_20110628-2_all.deb
udevの設定をうまいことやってくれるから、nvflashコマンドは一般ユーザでも実行できるようになるんだって。


3. 電源停止

電源が入っていたら止める。

4. メンテナンスモード起動
USBケーブルをホストPCとつなぎ、CtrlとESCボタンを押しながら電源を入れる。
これでLEDはつくがモニタには表示されない状態となる。

5. ブートローダをインストールする
以下のコマンドを実行する。
$ nvflash --bl /usr/lib/nvflash/fastboot.bin --sync
Nvflash started
rcm version 0X20001
System Information:
   chip name: t20
   chip id: 0x20 major: 1 minor: 2
   chip sku: 0x8
   chip uid: 0x123410c9415f1234
   macrovision: disabled
   hdcp: enabled
   sbk burned: false
   dk burned: false
   boot device: emmc
   operating mode: 3
   device config strap: 1
   device config fuse: 0
   sdram config strap: 1

downloading bootloader -- load address: 0x108000 entry point: 0x108000
sending file: /usr/lib/nvflash/fastboot.bin
| 940112/940112 bytes sent
/usr/lib/nvflash/fastboot.bin sent successfully
waiting for bootloader to initialize
bootloader downloaded successfully
6. パーティションテーブルと中身をバックアップ
$ nvflash -r --getpartitiontable part.txt
2,3,4,5,6,7,8,9,10,11,12,13,14があることを確認する。
$ nvflash -r --read 2 02_bootconfig.img
$ nvflash -r --read 3 03_partitiontable.img
$ nvflash -r --read 4 04_bootloader.img
$ nvflash -r --read 5 05_recorvery.img
$ nvflash -r --read 6 06_kernel.img
$ nvflash -r --read 7 07_mbr.img
$ nvflash -r --read 8 08_system.img
$ nvflash -r --read 9 09_cache.img
$ nvflash -r --read 10 10_misc.img
$ nvflash -r --read 12 12_data.img
$ nvflash -r --read 13 13.img
$ nvflash -r --read 14 14.img
13, 14が何かわからなかったがとりあえず存在しているのでバックアップする。

7. ブートイメージ書き込み
再度Ctrl+ESCを押しながら立ち上げなおして、以下を実行する。
$nvflash --bl /usr/lib/nvflash/fastboot.bin --sync
$nvflash -r --download 6 ubuntu-11.10-preinstalled-desktop-armel+ac100.bootimg
Nvflash started
[resume mode]
sending file: ubuntu-11.10-preinstalled-desktop-armel+ac100.bootimg
/ 8388608/8388608 bytes sent
ubuntu-11.10-preinstalled-desktop-armel+ac100.bootimg sent successfully
その後、一度電源を落とす。

8. tar.gz入りUSBメモリを挿入してブート
先ほどダウンロードしたtar.gzを何らかのUSBメモリのルートにコピーして、接続後、ブートする。

9. 書き込み
/dev/mmcblk0p7をdestroyしていいか聞かれるので、yを答える。

10. 初回起動
無事起動したら、言語だとか、セットアップ時に聞かれるようなことを答えてあげる。

11. Lubuntuの導入
標準だと重いので、Lubuntuにすることにする。
# apt-get install lubuntu-desktop
ports.ubuntu.comの回線のせいか通信がやたら遅く時間がかかった。

12. 日本語入力
試行錯誤したが、日本語入力は日本語localeにしても最初はできないので、
 # apt-get install ibus-anthy
とする。Ubuntuの日本語入力に詳しい某氏に助けていただいた。thx.


これで一通り使えるようになるはず。Flash pluginを入れられるらしいが、まだ入れていない。

参考:
https://wiki.ubuntu.com/ARM/TEGRA/AC100
http://d.hatena.ne.jp/S0R5/20111024/1319461443
http://blog.livedoor.jp/dupondroid/archives/6196989.html
http://www45.atwiki.jp/dynabookaz/pages/24.html
http://shanghai.at.webry.info/201112/article_1.html



Crossbowクイックスタート

OpenSolarisのCrossbowにおけるetherstubはbridgeだと思っていたが、どちらかというとインタフェースのようだと昨日知った。Linuxにおけるdummy と近いものだと理解した。

というわけで頭の中の絵を更新するとともに、図に表してみた。

dladm create-bridgeは「bridge0」を渡すと「dladm: invalid bridge name 'bridge0'」と言われる(OpenIndiana 151a)。数字はダメなのか。

LibreOffice Drawで「グリッド線で位置合わせ」が機能しない気がするのはなぜか

答え:デフォルトのサブ目盛の設定が細かすぎるから

LibreOffice の図上で右クリックして、「グリッド線>グリッド線で位置合わせ」を選択すると、グリッド線に合わせて図形を描画できそうな気がするも、フィットしている気がしない(カーソルがスムーズに動いてしまう。)

なぜかというと、この位置合わせは「サブ目盛」という幅に合わせてフィットするのだが、デフォルトはこの幅が1mm(相当:1cm/10space)なので、100%表示程度では全然フィットしている感がない気がするのだ。

解決策としては簡単で、サブ目盛の幅の設定を変更すればよい。設定は「ツール>オプション>LibreOffice Draw>罫線」で行うことができる。

詳しくは下図を参照。

計算すると、12ptが4.23mmだったので、0.5cm/2spaceとしてみた。

参考:
http://www.netplan.co.jp/archives/1453

2012-02-12

Linuxと3TB HDDとUSB-SATA変換アダプタ

USB-SATA変換アダプタなんて、速度以外はみんな同じだろうと考えていた。3TB HDDを接続するまでは。

今回は、USB-SATA変換アダプタを使って、3TB HDDをLinuxに接続するお話。

結論:3TB HDD対応と書かれたアダプタを使おう

用意したもの
・3TB SATA HDD
Western Digital WD30EZRX。タイ洪水前に買ったものである。
Windowsですでにパーティションを作っており、全領域をNTFSとして割り当てているつもりのディスクだが、Windowsでパーティションを作った際、Windowsさんが頭に小さな領域を作ったらしく、パーティションは2つある。当然ながらGPTである。

・Ubuntu 11.10 (x86)の入ったPC
ちなみにカーネルは3.0.0-14-genericらしい。

・USB-SATAアダプタ
今回用意した(用意してしまった)のはこの3つ
  1.  AOTECH HDST-U1
  2.  Groovy UD-500SA
  3.  CENTURY 裸族のお立ち台 USB3.0 (CROSU3)

1. AOTECH HDST-U1
転がっているLinux boxにHDDをつなげられるようにと買ってみたもの。HDDを立てて使うタイプ。
2000円以下ぐらいと安価に購入できる。以下接続してみた結果。

<接続した際のkern.log>

…sdbとsdcが見える。

<fdisk/partedの結果>


2.2TBと0.8TBのディスクが見える。

2.2TB + 0.8TB = 3TBなので、容量としてはフルに見えているつもりのようだが、これではちゃんと使えない。

ちなみにWindows Vistaから見ても2つに見える。やはり使えない。


2. Groovy UD-500SA
HDDが壊れてしまったときとかに、つないで試せるように前から買ってあったもの。SATAと電源のコネクタだけあるタイプ。HDST-U1のせいじゃなく、HDDが壊れているのかと思って試しにつないでみた。

<接続した際のkern.log>

以下同じエラーが続く。

fdisk/partedは、裏でエラーが出つづけるだけなので、使えない。

「5860533168 512-byte logical blocks: (3.00 TB/2.72 TiB)」と出ているので、正しくサイズは認識しているが、I/Oができないようで、結局これも使えないということになった。

Windows Vistaではきちんと見えるし、使えるのが不可解であるが。

3. CENTURY 裸族のお立ち台 USB3.0 (CROSU3)
もしかすると、2TB越えはGPTにするだけでなく、ハードウェア側の対応もいるのかなと秋葉原に行ってみたら「3TB対応」のシールが貼られていたので買ってみたのがこれ。商品名の通り、HDDを立てて使うタイプ。

<接続した際のkern.log>


非常に短い安心のログである。

<fdisk/parted>


きちんと3TBが見えているし、パーティションテーブルもきちんと見えている。マウントも問題ない。

Windows Vistaから見ても問題ない。


というわけで、3TB HDD 対応とされている製品を買ってきたら問題なく利用することができた。
2TB越えのHDDを接続するときは、ケチらずに対応が明示されている製品を買おう。