TenForward

技術ブログ。はてなダイアリーから移転しました

CRIU (2)

通信中のプロセスを dump して restore してみます.CRIU (1)] の時と同じく SD 誌 2012/11 月号の内容とほぼ変わりません.

  1. まずは適当に wget などで少し時間のかかるものを取得してみます.
    wget http://example.com/plamo64-1.0_dvd.iso
  2. dump を実行します.ここで "--tcp-established" オプションを追加します.
    crtools dump --tcp-established -t 10588 -j
    • すると wget のプロセスは強制終了されます.
  3. ここで iptables を見てみると,通信中のホストとの間に DROP のルールが設定されているのがわかります.
    # iptables -L -n
    Chain INPUT (policy ACCEPT)
    target prot opt source destination
    DROP tcp -- 172.16.44.17 172.16.44.19 tcp spt:80 dpt:39132
  4. しばらくしてからおもむろに restore を実行します.ホストをリブートしたりとか.:)
    # crtools restore --tcp-established -t 10588 -j
    Error (./include/sk-inet.h:52): Failed to turn off repair mode on socket:
    100%[====================================>] 3,114,389,504 45.3M/s 時間 91s

    2012-10-25 20:56:18 (32.7 MB/s) - `plamo64-1.0_dvd.iso' へ保存完了 [3114389504/3114389504]
  5. 終了後に iptables のルールを見るとありません.
    Chain INPUT (policy ACCEPT)
    target prot opt source destination

    Chain FORWARD (policy ACCEPT)
    target prot opt source destination

    Chain OUTPUT (policy ACCEPT)
    target prot opt source destination


無事 iso イメージの取得が再開され,ファイルが保存されました.md5sum で確認しましたが,ファイルが壊れていることはありませんでした.

ただ,

  • crtools dump コマンドが失敗することがあります.何度か繰り返し実行しているとそのうち成功するという感じ.一発で成功するときも数回で成功することもあったり色々でした.原因はわかりません (調べてません).
    # crtools dump --tcp-established -t 10588 -j
    (00.016502) Error (sk-tcp.c:185): recv failed (199505, want 199504, errno 29): Illegal seek
    (00.016600) Error (cr-dump.c:1559): Dump files (pid: 10588) failed with -1
  • scp 等で試しましたが,restore 後 stalled になったりして遅いとかなったりしました.
  • restore の時にエラー出てますけど,これも調べてません.