読者です 読者をやめる 読者になる 読者になる

Ubuntuの壊れかけたHDDからのデータ救出劇。

状況

HDDが死亡。

  • ディスクが読み込み専用になって気がつく。そのまま放置するといろいろ面倒な用途マシンので頑張って治すことにする。
  • Ubuntuusbメモリから起動してfdisk -lをすると見える。
    • しかし、sudo mount /dev/sda1 /mnt とかやってもマウントできない。
    • USBアダプだで接続しないとやばそうな気配を感じるほど末期。
    • USBアダプタでそのうち見えなくなる。

対策を次のようにした。

死亡HDDから吸い出しの儀

死亡HDDは次のアクションでどれぐらいヤバイ状況になるのかわからないので極力何もせずに吸い出しに専念する。

  • まず大容量のHDDを部屋の片隅から発掘した。幸いにも故障したHDDの数倍でかい容量のHDDが発掘される。
  • 次にこの死亡HDDと吸い出し先の数倍でかいHDDをマシンにつなぐ。
    • この際、死亡HDDは正常にマウントできないのでUSBアダプタ経由とした。
  • sudo fdisk -lでつながっていることを確認。
  • まずはddコマンドでHDD全体を吸い出す。ところが不良セクタ多数により吸い出せない。
  • 次のコマンドでエラーセクターはスキップして読み込む。512byteセクタなHDDなのでbs=512にしておく。
    • sudo mkdir /mnt2

    • sudo mount /dev/sdb1 /mnt2

    • sudo dd if=/dev/sdc of=/mnt2/sdc512.img bs=512 conv=noerror,sync

  • 不安になるほどうじゃうじゃエラーが出てくるので我慢して全部吸い出し終わるのを待つ。
  • 終わったら吸い出しファイルが異常なサイズになってないかは確認する。異常な場合は何か間違っているのでよく調べてね。
まずはマウントしてみよう

マウントをする。イメージファイルなのでデバイスではない。なのでまずはループバックデバイスにひも付けてデバイスとして見えるようにする。

  • sudo losetup /dev/loop1 /mnt2/sdc512.img

  • このままではfsckを流せないので、再度中のパーティションについてマッピングを行う。

    • sudo kpartx -a /dev/loop1

    • これにより、/dev/mapper/loop1p1とかでパーティションが見えるようになる。
  • fsckをかけてみる。

    • sudo fsck -yf /dev/mapper/loop1p1

  • スーパーブロックがぶっ壊れてダメな場合があるのでその場合スーパーブロックのみ再構築して再度fsckを試みる。

    • sudo mksf.ext4 -S /dev/mapper/loop1p1

    • sudo fsck -yf /dev/mapper/loop1p1

  • 中のファイルをマウントして取り出す。

    • sudo mkdir /mnt2p1

    • sudo mount /dev/mapper/loop1p1 /mnt2p1

    • sudo cp -pr /mnt2p1/xxxxx ./

VMのディスクの復旧と容量アップ

で、問題はここなのである。 せっかくの機会なのでディスクのサイズアップも行う。 手続きとしては次のようになる。

  1. 大きめのディスクイメージファイルを作る。
  2. 作ったディスクイメージにパーティーションを切る。
  3. 移行元のディスクイメージをマウントする
  4. ddでコピーする?それともフォーマットしてcopyコマンド?

  5. ddでコピーした場合。
    • ddでコピーすると動く。動くのだが・・・すぐに欠損セクタ由来と思われるfsエラーに引っかかってリードオンリーモードに入ってどうしようもなくなる。
    • とりあえずディストリ自身のバージョンアップを行うと以下の作業を延々と行うはめになる。
      • sudo fsck -yfc /dev/vda1

      • sudo reboot

      • sudo apt-get install -f

      • sudo dpkg –configure -a

      • エラーになって最初に戻る。
  6. フォーマットしてcopyコマンドでコピーした場合。
    まず、loopbackデバイスにひも付けて、マッピングしてフォーマットを行う。
    • sudo losetup /dev/loop2 /mnt2/newvmdisk.img

    • sudo kpartx -a /dev/loop2

    • sudo mkfs.ext4 /dev/mapper/loop2p1

    • sudo mkdir /mnt2loop2

    • sudo mount -t ext4 /dev/mapper/loop2p1 /mnt2loop2

    • sudo losetup /dev/loop1 /mnt2/oldvmdisk.img

    • sudo kpartx -a /dev/loop1

    • sudo fsck -yfc /dev/mapper/loop1p1

    • sudo mkdir /mnt2loop1

    • sudo mount -t ext4 /dev/mapper/loop1p1 /mnt2loop1

    • sudo cp -fr /mnt2loop1/* /mnt2loop2

  7. これだけでは当然ダメで、chrootしてgrubのインストールとupdate-grubを行う必要がある。
    • sudo mount –rbind /dev /mnt2loop2/dev

    • sudo mount –rbind /sys /mnt2loop2/sys

    • sudo mount -t proc proc /mnt2loop2/proc

    • sudo chroot /mnt2loop2 /bin/bash

    • # update-grub

  8. パスの関係上、grub-installだけはインストールCDで起動したVM上から行う必要がある。ないのかな?

    • # grub-install –recheck /dev/vda

  9. 仮にgrubが壊れていた場合。
    インストールしなおして再チャレンジするしかない。
    • sudo apt-get update

    • sudo apt-get install –reinstall grub

  10. 仮にsudoが壊れていた場合。

    とにかくgrubをいじってシングルユーザーモードで入って、rootのパスワードを設定する。sudoをそのまま再インストールか、再起動して再インストールする

qiita.com

  • $ su -

  • # apt-get update

  • # apt-get install –reinstall sudo

  • 運が良ければこのままディストリビューションのバージョンアップを行う。
    そう、運が良ければ。というのも不良セクター由来のバイナリ不良は各パッケージに及んでおり、パッケージ再インストールを行うより他確実に動く状態にはならない。fsckでは検出できない。 ディストリビューションのバージョンアップを行えればパッケージがほぼすべて最新バージョンに置き換わるはずである。
    • sudo do-releace-update

以上で動くようになるはず・・・

もちろん、不良セクター由来のデータ欠損はデータにも及んでいてだいぶ壊れてる気がするがないよりマシなのである。

くれぐれも多世代バックアップは欲しいなぁと思う次第。

システム構築の十戒

1:システムの一生は5年からそれ以上です、メンテナンスができないソースが一番つらいです。どうか組む前にそのことを覚えておいて欲しいのです。 2:お客様がシステムに何を要求しているのか、それを理解、要件定義書に落として握ったうえで組んで欲しいのです。 3:基盤、FW、ミドルウェアの仕様を確認して欲しい、それがシステム安定稼働の第一歩なのですから。 4:ロジックの存在理由についてコメントを書かなかったり、名称を適当につけたり、マジックナンバーや使い回しをしないでください。あなたは楽が出来るかもしれませんがチームのメンバーは理解に相当な時間を消耗します。 5:時々動作確認してください。ちゃんとしたテストができてなくてもコンパイルにビルドが通らないコミットはチームメンバーのテンションを下げます。 6:あなたがどんなレベルの修正をしたか、SCMのコミットログを見ればすぐわかります。 7:テストをする前に覚えておいて欲しいのです、プログラムは書いたとおりに動くということを。 8:バグだ、作動がおかしい、環境がおかしい、動きませんと言う前に、バージョンが最新なのか、仕様変更のタイミングや、手順書や仕様書を確認してください。もしかしたらDBとアプリのバージョンがずれていたり、必要な初期データがないかもしれない。それともそもそも動かす環境がもう別、クラウドなのかもしれません。 9:システムが運用フェイズに入ってもメンテをする想定でいてください。例え組むだけでも瑕疵担保期間というものが有ってメンテが必要な可能性が有ります。 10:システムが死ぬときは5年の寿命を迎えた時か、あまりにも糞すぎてお客が大枚叩いて作った今のシステムを捨ててもう一回作りなおしたほうが儲かると判断した時です。前者は幸せですが、後者は泥棒と罵られても仕方ない惨状です。

うん。やはり何か本質を外してる感がまだあるな。

異機種改造ネタ:RYZENよQuadra700へ

togetter.com

詳細はこちらへ

続きを読む

ネタ、コミティアに向けて

1

O「ジョニー無理はなしよ」
J「OKわかってるさ。」

  • 人型である理由は?
  • 慣性制御よ
  • まだ慣性制御は質量の移動なしにはできないわ。

J「こちら、ジョニー。守備隊、状況は?」

守「ジョニーか、助かった。済まないが市街地が占拠された。無力化を希望する。出来れば無傷で奪還したい。規模は大隊規模の模様、敵にマシンなし、装甲車両は20両以上を確認。以上」

J「了解、これより市街地に展開する敵部隊を排除する。」

  • 計算機の力で千載一遇の天才格闘家の動きを演じるの。

ありえないほどの軽やかさで慣性を打ち消す体術、気が付かない敵兵。
次々に炎上する車両、其れすらも時間差でかろやカニ

  • とんでもない計算量でどんな人間より繊細で素早くこの巨体を操ってみせるわ。

そして強烈な突風と共に浮き上がる巨体。

  • もう、人間は勝てないの。
  • 計算機の力なしではね。

//-------------------------------------------------------------------------

2

  • 私達はこの子たちをマリオネットと読んでるわ。

C4Iで対抗する敵兵

敵「急げ、マリオネットだ、各自退却、防衛体勢を維持しながら....」
声が聞こえるが全ては細切れになっていく

  • 我々よりはるかに高速な頭をしてる
  • 中で選挙をやったって巨体は任務を華麗にこなせるわ

この切り刻んだ時刻のターン一手一手予測を繰り返し次の手を決める。この電脳のクロックに人間をして動かぬ銅像。確かにこの巨体と音速という制約は大きいが戦車砲の弾も止まって見るこの世界なら計算力こそすべてだ。

  • なんだて数手先まで予想できる状況が実現してるの。

やはり、人間が決定権を握るんじゃトロイ。数があっても、飽和ができないすべてお見通しさ。

  • でも私達が手綱を握ってる。

//-------------------------------------------------------------------------

3

  • 彼らには達人たちから受け継いだエレガンスはあるけど

狙いをつける戦車砲
敵「いける、くたばれ。」

  • 野望がないわ。

確かに、高性能計算照準器は厄介だ。それも、すべて任せた機械本人のアクセスは。こちらも相応の手を打たないとまずい。が、数が足りない。速度もそうだがなにより彼らは所詮アルゴリズムが足りない。そうエスプリがない。

  • 殺戮は不要、勝利条件は無力化よ。
  • まあ、壊される方は殺戮だろうけどね。

警報:「マリオネット反応、接触まで跡30秒」

まずい、ここで相手にしたら都市を壊さないという条件が守れない。

  • 命令に従い、うまくこなすことが喜びなの。

郊外、それも畑、資材置き場・・・・あった。

  • 万難を排して命令を忠実にこなすわ。

//-------------------------------------------------------------------------

4

敵「なんだ、奴が逃げるぞ、友軍だ、友軍のマリオネットだ」

「警告、警告、電脳処理速度を最大冷却器展開、冷却開始」

  • 今、彼に足りないのはエネルギーだけよ
  • エネルギーさえあれば、もっと計算力は、計算力密度はあげられるわ


O「ジョニー仕方ないわね、伸びた奴の鼻をへし折ってやんなさい。」
J「でも、膝があと10分も持たないんだ。」

  • もちろん、ついてこれるボディがあってこそだけど。

O「OKそんなの気にしなくていいわ。存分に直してあげる。」
J「じゃあ、いざという時は回収してくれよな。」
O「ジョニー、弱気は禁物よ」

  • 戦闘機じゃないレベルでバックアップ部隊が必要になるのが辛い所ね。

O「整備隊長!」
整「あん?」
O「今夜は忙しくなるわよ」
整「あいよ。おーっしオーバーホールの準備だ各班準備にかかれ!」
//-------------------------------------------------------------------------

5

接触

  • もし、マリオネット同士が対峙した場合どうなるって?

奴は数歩先まで読んでる。無力化は2本以上の四肢を機能不全にするとか、難しい。なかなかの計算量だ。君の動きがこれなら1個軍でも壊滅させられるよ。だが、イレイザーエンジン搭載型の私に勝てるかな。

  • 今までの勝率からすると
  • もちろん計算量の寡多。

ほう、やはり他の連中の懐にとは行かないか。以前の情報が欲しい。そう、
く、僕の意思決定に必要なデータが来ない。
この一手に取れる情報は300kbか。光速が恨めしいほどに遅いな。

  • でも、その差があまりない状況なら

ピーン・・・
なるほど
君の弱点はそこか、

  • 別の要素が決め手になるわ

5回もこの速度でひねれば、そうよく防いでくれた。

バッキャ

//-------------------------------------------------------------------------

6

シマッたのかをだな。ありえないって?そうだよな、私は何故って7回!7回まで同じ動作を行えるからだよ。

  • 素材の技術力とかね

ああ、君はまだ戦える。そうだ、そのモーションで防ぐしかないな。そういい子だ、この勝負私の勝ちだ。

崩れ去る左足。
さすがに逃げるか!?

  • 勝てるのはマリオネットにはマリオネットを、それも高度なバックアップ体制も加えて。
  • でもね、依存したら逃げ道は用意しないと目的を見失っちゃいけないわ。

O「追わなくていいわジョニー、帰投して」
J「らじゃー」

  • 壊れたらそこで伝説は終わりになるしね。
  • 戦わず次に勝てれば上策なのよ。

Gimpfuの進捗

やっています。が、また勤務状況の苛酷さが増しつつあるので進捗は思わしくない状況です。

現在できている箇所を

Webサービスについて
  1. Webページはできた。
  2. Webサービス用のDockerコンテナもできた。
  3. 受ける側のWebサービスはNode.jsで実装済み。
  4. Webサービスへの転送はできた
  5. サーバー上でのGimpfuの実行まではできる。
  6. バッチ経由でのGimpfu呼び出しができない。

状況です。

Gimpfuの進捗

やっています、やっていますとも。

進捗は以下の通り:

ローカルのGimpfu

①ローカル環境でGimpfuによる漫画原稿用紙なxfcファイルから印刷用イメージを作成はできた。
②もちろんろりこみ閉じのコピー本の合体ファイルまでは作っている。
③で、ついでに印刷用PDFを作ったわけだが、セブン・イレブンのコピー機は認識しない。ここはいくらか調査をしたがよくわからなかた。ちなみに使っているのはPythonのPDF作成ライブラリ
④マルチスレッドによるある程度の多重化はできたが・・・

Webサービスについて

④現在サーバを用意
⑤投稿用Webページを作成
⑥バックエンドのサーバーを現在作成中

今後の予定

現在のモジュール

今後はサーバでGimpfuを走らせてVPSにデプロイ、
公開。

追加機能プラン

其れができたら、今度は原稿用紙作成サービスを作る。
その次はWebのお絵かきツールと連携
その次に外部サービスへの投稿機能サポートか。
その次にポータル化してP2Pのアンリミティッドな漫画サービスを作る。

というわけで乞うご期待。
問題はスケジュールなのだが・・・

Gimpfu再開しました。

コミケ用の新刊ができたけどあまりの手間で結局入場を果たせなかったので、スクリプトを作って自動化することを再開しました。
最終目標はAWSを活用したWebサービスにして、原稿用紙のダウンロードと整形までをオンラインで行えるようにする予定です。
まあAWSとか使っちゃうと金の切れ目が縁の切れ目になってしまいますが。

https://github.com/ryunosinfx/MansikiForGimpfu