11月
02
2009
0

MBRのおさらい

先日お亡くなりになったMacBookのHDD
データがなくなったのは仕方ないが,なんとか活用できないものか?

Intel Macは既にEFIを利用していて,パーティションテーブルにはGPTを採用している
そして,WikipediaによるとGPTはディスクの後方にもGPTヘッダーとパーティションテーブルを備えているらしい

互換性を保つためGPTではLBA0にMBRが存在するらしく,ディスク全体がひとつのパーティションであるように見えるらしいが,問題のHDDのLBA0には欠損があるようで読み取れなかった

ということで,このHDDを利用して,勉強がてらパーティション情報を復活させてみようと思う

その前に確認の意味も込めてMBRのおさらいをしてみる

実験台にされたのはUbuntu 9.04 (64bit) メインのLinuxマシン
こいつはソフトウェアRAIDを組んでるマシンだが今回は片方のディスクを対象にする

このディスクの情報は下記の通り

% sudo sfdisk -l /dev/sda

ディスク /dev/sda: シリンダ数 60801、ヘッド数 255、63 セクタ/トラック
ユニット = 8225280 バイトのシリンダ、1024 バイトのブロック、0 から数えます

   Device Boot Start     End   #cyls    #blocks   Id  System
/dev/sda1   *      0+      7       8-     64228+  fd  Linux raid 自動検出
/dev/sda2          8    1831    1824   14651280   fd  Linux raid 自動検出
/dev/sda3       1832   56783   54952  441401940    5  拡張領域
/dev/sda4          0       -       0          0    0  空
/dev/sda5       1832+  56540   54709- 439450011   fd  Linux raid 自動検出
/dev/sda6      56541+  56783     243-   1951866   82  Linux スワップ / Solaris

まず,MBRを取り出してやる
MBRはHDDのCHSだとC:0 H:0 S:1,LBAだと0から512バイトの領域なので

% sudo dd if=/dev/sda of=mbr bs=512 count=1

取り出したMBRをダンプしてやる
zオプションを使ってることから明らかなように作業はLinuxでやってます

$ od -tx1z -Ax mbr
・・・
0001b0 00 00 00 00 00 00 00 00 18 cd 01 00 00 00 80 01  >................<
0001c0 01 00 fd fe 3f 07 3f 00 00 00 c9 f5 01 00 00 00  >....?.?.........<
0001d0 01 08 fd fe ff ff 08 f6 01 00 20 1f bf 01 00 fe  >.......... .....<
0001e0 ff ff 05 fe ff ff 28 15 c1 01 a8 84 9e 34 00 00  >......(......4..<
0001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa  >..............U.<
000200

MBRの大半はIPLで占められていて,先頭から446バイト後方にパーティションテーブルが,さらに64バイト後方に2バイトのシグネチャ (0xAA55) がある

ダンプ結果を見ると確かにシグネチャ 0xAA55が確認できる
(リトルエンディアンな点に注意)

0×0001b8-0×0001bbの4バイトには,ディスクIDも確認できる

ダンプデータから,パーティションテーブルの情報を抜き出して見る
パーティションテーブルには4つのエントリがあり,各エントリの構成は先頭から順に,次のようになっている

  • ブートフラグ (8bits)
  • 開始位置 (CHS) (24bits)
  • パーティションタイプ (8bits)
  • 終了位置 (CHS) (24bits)
  • 開始位置 (LBA) (32bits)
  • セクタ数 (LBA) (32bits)

また,CHS形式の値は先頭から順に,次のようになっている

  • Head (8bits)
  • Cylinder上位 (2bits)
  • Sector (6bits)
  • Cylinder下位 (8bits)

従ってパーティションの情報は次の通り

Partition Boot Flag Partition Type Start (CHS) End (CHS) Start (LBA) Sector Counts
1 80h FDh C:0 H:1 S:1 C:7 H:254 S:63 63 128457
2 0h FDh C:8 H:0 S:1 C:1023 H:254 S:63 128520 29302560
3 0h 05h C:1023 H:254 S:63 C:1023 H:254 S:63 29431080 882803880
4 0h 0h C:0 H:0 S:0 C:0 H:0 S:0 0 0

基本パーティションと拡張パーティションをあわせて3つしかないので4番目のエントリは0で埋められている

ブートフラグを見ると第1パーティションにブート可能を示す80hが格納されており,他のパーティションには0hが格納されている

BIOSによってMBRが0×7C00にロードされると,IPLはブートフラグが80hになっているパーティションを探す

古いBIOSでは,パーティションテーブルの先頭から順に1バイトずつ,DL, DH, CL, CHレジスタに格納される
つまり,DLレジスタでこの80hをドライブナンバー,DHでヘッド数,CHでシリンダ数の下位8ビット,CLの第7-8ビットでシリンダ数の上位2ビットを指定してINT 13hをコールすることで,パーティションテーブルのブートレコードが読み込まれる

拡張INT 13hでは,CHSではなくLBAを利用する

ちなみに,GRUBなどはIPLを書き換えて独自のブートプロセスをとるため,この限りではない

CHS方式では1024個のシリンダしか扱えないので,最近の大容量のHDDではCHSによるジオメトリではなくリニアなLBAを使用するが,CHSのエントリとしては1023/254/63が格納されている

sfdiskの結果をみると,H:254 S:63は固定で,シリンダの値としてディスク容量から算出された1024より大きな値が表示されている

パーティションはシリンダの境界から始めるのがルールだが,第1パーティションだけは例外でMBRの次のヘッダである C:0 H:1 S:1から始まる

LBAの開始アドレスとそのパーティションのセクタ数を足してみると,次のパーティションの開始アドレスになっており,リニアにアドレスが振られていることが分かる

パーティションタイプは,FDhがLinuxのソフトウェアRAID,05hが拡張領域.他にもNTFSなら0×07とかになる

続いて,CHSとLBAの変換方法はHDDの基本的な構造から考えれば自明

CHS->LBA
 LBA = C * 1トラックのセクタ数 * ヘッド数 + H * 1トラックのセクタ数 + S – 1
    = (C * ヘッド数 + H) * 1トラックのセクタ数 + S – 1
LBA->CHS
 C = LBA / 1トラックのセクタ数 / ヘッド数
 H = (LBA / 1トラックのセクタ数) % ヘッド数
 S = LBA % 1トラックのセクタ数 + 1

計算してみると分かるが,LBAから算出した値はsfdiskの表示する1024を超えたシリンダ番号と一致する

Written by p0n in: PC | タグ: ,
7月
08
2009
0

iPhone/iPod Touchとの同期(カレンダー編)

最近マジメにiPod Touchを使うことが多くなってきたので,カレンダーとか連絡先とかの同期を考えてみた
これまでだと毎週のようにファーム入れ替えたり復元したりしてたので,あまりそういう用途で使うことは考えてなかったw

そろそろiPhoneも買おうと思うが,今使ってる機種(スパボ一括で支払い済み)の月々割引分がまだ1.5万近く残ってる
しっかし機種変したら本来の割引分は返ってこないなんて,ある意味詐欺のような契約やな
頻繁に機種変してもらった方がソフトバンク的にも儲かりそうな気がするんだが・・・

iPhoneやiPod Touchで同期と言えばAppleサマのMobileMe
iPhoneユーザならiPhoneを探す「Find My iPhone」はともかく,リモートワイプはある意味必須なツールな気がするので入ってもいいけどなぁ〜20GBのiDiskもウレシイし
問題はあの微妙な価格設定
せめて年間4980円なら即加入なんだが・・・

ということで前置きが長くなったが,しばらくはケチくさい方法でやってみる

実は以前カレンダーの同期を試したことがあって,NuevaSyncというサービスを使っていた
しばらく使ってなかったが,前々からアナウンスしていたCalDAVとMailのプッシュにまだ対応してないらしい

どうやらGoogle SyncでiPhone/iPod Touchと同期できるらしいので,設定してみる
第三者にパスなどを教えなくてよいのも精神衛生上よい感じだ
もうNeuvaを使わないなら,Googleアカウントに行って,認証済みのウェブサイトを変更からNeuvaを消しておくと安心だ

設定は簡単で,iPhone/iPod Touchの設定からExchangeのアカウントを追加するだけ

Google Syncにわかりやすいチュートリアルがある

でも,上記だけだとカレンダーは1つしか同期されない
複数のカレンダーを同期させる場合は,Mobile Safariでhttp://m.google.com/sync/にアクセスして設定してやればいい

自分はCalaborationを使ってiCalとGoogle Calendarを同期しているので,iCalから予定を追加するとものの数秒でiPod Touchに追加された
逆にiPod Touchから追加した場合は,Google Calendarにはスグに反映される
iCalに反映されるまでのラグは,iCalの更新間隔の設定で変えられる

Google SynchはまだMailのプッシュに対応してなかったので,iPodの設定でメールの同期はオフにしておく

連絡先の同期は一応やってみたが,動くには動くけどって感じ
グループの扱いがイマイチだったのと,Googleのコンタクトリストとアドレスブックの同期がかなり微妙なので,オフにしてます

Written by p0n in: ガジェット | タグ: ,
11月
27
2008
0

Mac OS X 10.5 (Leopard) でホームディレクトリを移動する

一般的にUNIX系OSではホームディレクトリには /(ルート)をマウントするパーティションとは別のパーティションを割り当てる

いろいろメリットがあるけど,パーティションを分けておけば,システムを再インストールするときにデータの復元が必要ないのでラクになる

Leopardはインストール時にホームディレクトリのマウント場所を指定できない
でも,そこはUNIX 03認定を受けたUNIX OSなのでfstabを書き換えればOKなハズ!!
と思っていたが,Leopard流のお作法があるようなのでまとめておく

Windowsでいうマイドキュメントの移動のような感じだが,個人的にはfstabでマウントポイントを変える方が素直で好き
ちょっとググった感じでは,やはりfstabの書き換えでも問題なく動く模様

以下は,h2というユーザのホームを /Volumes/Home/h2 に移す例

  1. ホームディレクトリを移動先にコピー
  2. $ sudo ditto -v -rsrcFork /Users/h2 /Volumes/Home/h2

  3. 「システム環境設定」の「アカウント」を開いて,左下のカギをクリックしてロックを解除
  4. ホームを移動したいユーザのアカウントを右クリックすると「詳細オプション」が表示されるのでクリック
  5. 「ホームディレクトリ」の欄を変更
  6. ログアウトして再度ログイン
  7. 移動前のホームディレクトリを名前を変えて待避
  8. $ cd /Users
    $ sudo mv h2 h2.org

  9. 移動先にリンクをはっておく(絶対パス対策)
  10. $ sudo ln -s /Volumes/Home/h2 h2

  11. 待避したホームディレクトリを削除(そんなに大きくないなら残しといたほうがイイかも)
  12. $ sudo rm -rf h2.org

Mac OS Xはスワップ専用のパーティションを作らない
HFSは断片化しにくいそうだが,長く使えばスワップのせいで結構断片化してそうな気がする
そういう意味でも,パーティション分割はよい選択肢だと思う

Written by p0n in: PC | タグ: ,
11月
12
2008
0

Ubuntu 8.10でATOK X3のセットアップにちょっとハマる

OSのセットアップの次は,なにはともあれATOK

サポートサイトに従ってインストールしようとしたものの,キー配列の設定がおかしい
インストーラスクリプト setipatok_deb.sh のアンダースコア “_” が入力できない・・・

Shift+2でダブルクオートがでるし,やたらとハイフンを入力できるキーがあるw
インストール時からHHK Pro(ASCII配列)しかつないでないのになんでやろ?
まさかJapanese Teamのリポジトリを追加したから?

ともかく,CDなので不要なファイルを消すわけにもいかない
インストールスクリプトにリンクを張って回避した

次ラクをするためにメモしとく

  1. CDをマウント(以下,マウント先は /media/cdrom とする)
  2. インストールスクリプトへのシンボリックリンクを作成
  3. $ ln -s /media/cdrom/setupatok_deb.sh ~/hoge

  4. アップデートモジュールをDLして展開(以下,展開先は ~/atokx3up1 とする)
  5. タブ補完で入力できるように setupatok_up1_deb.sh 以外のインストールスクリプトは削除しておく
  6. 全員ログアウト
  7. 仮想端末に切り替え
  8. Ubuntuはデフォルトではrootでのログインを許可してないので,sudoできるユーザでログイン
  9. 文字化け対策
  10. $ export LANG=C

  11. /etc/gtk-2.0/gtk.immodules を作成
  12. $ sudo touch /etc/gtk-2.0/gtk.immodules

  13. インストールスクリプトを実行
  14. $ sudo bash ~/hoge

  15. CDのマウント先を聞かれるので適当に入力
  16. アップデートモジュールをインストール
  17. $ sudo bash ~/atokx3up1/setupatok_up1_deb.sh

  18. 起動設定を行う(設定用のスクリプトは全て setting_* という名前なのでアンスコが入力できなくても大丈夫)
  19. $ sudo bash /opt/atokx3/sample/setting_debian4.sh

  20. ログアウトし,端末を切り替えてXにログイン

ウィンドウの左下にでるうっとうしいステータス表示が気にならない人は,ここで終了
自分は気になって仕方がないので,抹殺

消すためのツール iiimf_status_hide はJustSystemsから提供されている

設定方法は以下の通り

  1. DLして展開
  2. 適当な場所にコピー(以下,/opt/atokx3/sample 内にコピーしたとする)
  3. 実行権限をつける
  4. ログイン時に毎回実行する必要があるので,/etc/X11/xinit/xinput.d/iiimf に次の1行を追加
  5. /opt/atokx3/sample/iiimf_status_hide

自分はMacPortsのクセでパスを間違えて,/opt/local/atokx3/… にしてたんで動かず悩んだ

「環境によっては動作しないこともあるので,自分でビルドしてね」に従って,ビルドしてしまった・・・ 
ビルドには build-essential と libgtk2.0-dev がいるので,自分でやる人はaptで入れましょう

Written by p0n in: PC | タグ: , ,
11月
11
2008
1

Ubuntu 8.10 Alternate CDでインストールがうまくいかない

7.04を超不安定にしてしまったので,8.10をクリーンインストールしてみた

Software RAIDを組んでいるのでインストールにはAlternate CDを使うことになる

いつも通りインストールを進めていたところ・・・
ベースシステムのインストールが73%になったところで,”Please insert the disc labeled: ‘Ubuntu 8.10 _Intrepid Ibex_ – Release i386 (20081028)’ in the drive ‘/cdrom/’ and press enter. Media change.” というポップアップが表示される

Desktop版のメディアを焼いて交換しよとするも,ドライブのイジェクトボタンを押しても反応がない
ejectコマンドでメディアを排出するとハングして先に進めない

Ubuntu Forumでも報告されているが,CDを4倍速以下で焼いたらうまくいったとか,ドライブを変えたらうまくいったとか要領を得ない

自分はCDを4倍速で焼き直してもだめだったが,外付けのUSBドライブを使ったらウマくいった
インストーラーの開始時に,USBデバイスのマッピングができないとかエラーが表示されていたが,特に問題いようなのでほっておくことにする

ドライブ変えてもだめなら,RAIDをフェイルさせてあとからミラーするのがベストかな?

Written by p0n in: PC | タグ: ,
11月
09
2008
0

軽量Lightbox風プラグインをタグ付け不要に

最近巷でよく見かけるLightbox風プラグイン

サイト移転前に使ってたLitebox plugin for Wordpressは,元祖のLightbox 2.0 for WordPressと比べると約3KBと超軽量なのが気に入ってたが,いちいちrel="lightbox"を書くのが面倒で使わなくなってしまった

とはいえLightboxは便利やから欲しいし,でもコレまで書いた記事全部にタグ付けるのは面倒・・・
って思ってたら,こんなサイトがっ!!

Litebox用に自動でrel="lightbox"属性を付ける方法はアチコチで紹介されていて珍しくないけど,このサイトで紹介されているスタイルシートやJavaScriptの本質を見抜いたやり方は美しい(書かれたご本人もそういっている) 
ということで,さっそくマネさせてもらった

詳細はサイトで解説されているので,以下は自分用にメモ

まず,gblitebox/css ディレクトリの中に lightbox.custom.css という名前で下記の内容のファイルを作成

#prevLink, #nextLink{
background: transparent url(/~h2/wp-content/plugins/gblitebox/images/blank.gif) no-repeat;
}
#prevLink:hover, #prevLink:visited:hover {
background: url(/~h2/wp-content/plugins/gblitebox/images/prevlabel.gif) left 15% no-repeat;
}
#nextLink:hover, #nextLink:visited:hover {
background: url(/~h2/wp-content/plugins/gblitebox/images/nextlabel.gif) right 15% no-repeat;
}

次に,gblitebox/js ディレクトリの中に litebox-1.0.custom.js という名前で下記の内容のファイルを作成 

//
// オリジナルの変数をオーバーライド
//
fileLoadingImage = "/~h2/wp-content/plugins/gblitebox/images/loading.gif";
fileBottomNavCloseImage = "/~h2/wp-content/plugins/gblitebox/images/closelabel.gif";
//
// オリジナルのinitLightbox関数をオーバーライド
//
initLightbox = function() {
addRelLightboxAttribute('content');
myLightbox = new Lightbox();
};
//
// rel="lightbox"属性をanchor要素に付加
//
addRelLightboxAttribute = function(id) {
if (!document.getElementsByTagName) { return; }
var ele;
if (id) {
ele = $(id);
if (!ele) { return; }
} else {
ele = document.body;
}
var anchors = ele.getElementsByTagName('a');
for (var i = 0; i < anchors.length; i++) {
var anchor = anchors[i];
if (anchor.getAttribute('href').match(/jpg$|gif$|png$/)) {
var rel = String(anchor.getAttribute('rel'));
if (!rel.toLowerCase().match('lightbox')) {
anchor.setAttribute('rel', rel ? rel+' lightbox' : 'lightbox');
}
}
}
};
最後に,gblitebox/gblitebox_plugin.php を編集
<link rel=\"stylesheet\" href=\"".$litebox_path."css/lightbox.css\" type=\"text/css\" media=\"screen\" />
<link rel=\"stylesheet\" href=\"".$litebox_path."css/lightbox.custom.css\" type=\"text/css\" media=\"screen\" />
・・・
<script type=\"text/javascript\" src=\"".$litebox_path."js/litebox-1.0.js\"></script>
<script type=\"text/javascript\" src=\"".$litebox_path."js/litebox-1.0.custom.js\"></script>
Written by p0n in: PC | タグ: ,
10月
24
2008
0

ホントどついてやりたい・・・

knockout

本日,月例アップデートを待たずに急遽WindowsのセキュリティパッチMS08-067(958644)がリリースされた

早速XPに適用しようと思ったのに,「一部の更新をインストールできませんでした」
原因はメッセージをみて調べろ的なこと書いてあるけど,メッセージってゆっても「一部の更新をインストールできませんでした」だけ
しかも一部じゃなくて全部やし,これじゃなんも分からんよw

色々調べて,Windows Update Agentとかいうものを再インストールすれば治った

セキュリティパッチを出すのも結構やけど,ちゃんと適用できるOSつくれよ
使い込んだシステムならともかく,前日に新規インストールしたほぼ何もしてない状態なのに・・・

Written by p0n in: ひとりごと | タグ: ,
10月
23
2008
0

Ubuntuでバックスラッシュ “\” が入力できない

hhk

今日実験用ノートPC(Let’s note R4)にUbuntu 8.04をインストールしていて気づいたこと

自分は日本語配列(いわゆるJIS)のキーボードはたたけないが,Let’s noteは当然日本語配列
なわけで,英語配列(ASCII)を選べないノートPCとかの場合は,無理矢理キーのレイアウトをUSにすることで対応している

今日もいつものように設定して終わりかと思いきや
バックスラッシュがうっ 打てんやんけ・・・

対策は,キーボードの形式を”jp106″から”Apple”に,レイアウトを”USA Macintosh”にすることですw

Feistyの時はUSでいけたハズやねんけど・・・?

そもそも大半の人はローマ字入力やのに,なんでJISキーボードみたいなもんがいるんか分からん

Written by p0n in: PC | タグ: , ,
10月
23
2008
0

Apple80211.framework

いわゆるStumblerアプリケーションは,Mac OS用のものだけでもAirRader, KisMAC, AP Grapher, iStumblerMacStumbler・・・と色々なものが存在するが,Mac OS Xに標準でインストールされているフレームワーク Apple80211 でも,同様の情報を得ることができる

使い方は簡単
まず,フレームワークのフォルダに移動する

$ cd /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/

各ネットワークのRSSIやセキュリティ情報を表示してみる

$ ./airport -s

SSID BSSID RSSI CHANNEL SECURITY (auth/unicast/group)
plane????? 00:??:??:??:23:6b -91 1 WEP
000A79A????? 00:??:??:??:22:84 -92 1 NONE
0016018????? 00:??:??:??:0a:3b -90 1 NONE
000D0BB6A????? 00:??:??:??:aa:68 -88 1 NONE
000D0B4????? 00:??:??:??:34:df -80 11 NONE
3B08901175????? 00:??:??:??:0c:a8 -90 11 WEP
c2????? 00:??:??:??:20:f4 -87 6 WEP
?????? 00:??:??:??:97:a7 -42 6 WPA(PSK/TKIP/TKIP) WPA2(PSK/AES,TKIP/TKIP)

接続中のネットワークの詳細を表示してみる

$ ./airport -I

agrCtlRSSI: -44
agrExtRSSI: 0
agrCtlNoise: -93
agrExtNoise: 0
state: running
op mode: station
lastTxRate: 130
maxRate: 130
lastAssocStatus: 0
802.11 auth: open
link auth: wpa2-psk
BSSID: 0:??:??:??:??:a7
SSID: ??????
MCS: 15
channel: 6

airport コマンドのオプションは以下のコマンドで確認できる

$ ./airport -h

Stumblerツールでは,表示される電波強度値がツールごとに同じ単位でも微妙に違っていたり,そもそも単位が不明だったりする
残念ながらairportコマンドもRSSIやノイズの単位は不明だ

ちなみに,メニューバーのWiFiのアイコンをOptionキーを押しながらクリックすると,接続中のネットワークの詳しい情報が表示される

MenuBar

Written by p0n in: PC | タグ: ,
10月
05
2008
0

termios構造体メンバc_cc配列の要素番号が違う

iPhone/iPod Touch用のプログラムを書いていてハマったこと

タイトルのまんまやけど,termios構造体メンバc_cc配列の要素番号が,termios(4) と termios.h で一致しなくてハマった・・・

マクロを使えば意識せずにすむんやろうけど,ダンプしてると変更が反映されてなくて悩んだ

manのtermiosページは「4th Berkeley Distribution  April 19, 1994」となってて古いのは分かるけど,せめてセクション4はちゃんと更新してほしい→Apple

Written by p0n in: ガジェット | タグ: , ,

TheBuckmaker WordPress Themes Webhosting, MP3, AAC & Co