landisk 改造メモ |
# perl hack_tcp_hdls.pl patch installed.パッチをアンインストールするには、
# perl hack_tcp_hdls.pl -u patch uninstalled.とする。動いているカーネルにパッチを当てるので、NASを再起動したらま た実行する必要がある。
int tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb) { struct tcp_sock *tp = tcp_sk(sk); unsigned int cur_mss = tcp_current_mss(sk, 0); int err; /* Do not sent more than we queued. 1/4 is reserved for possible * copying overhead: fragmentation, tunneling, mangling etc. */ ★if (atomic_read(&sk->sk_wmem_alloc) > min(sk->sk_wmem_queued + (sk->sk_wmem_queued >> 2), sk->sk_sndbuf)) return -EAGAIN; : }
hdb: dma_timer_expiry: dma status == 0x45 hdb: DMA interrupt recovery hdb: lost interrupt hdb: dma_intr: status=0x51 { DriveReady SeekComplete Error } hdb: dma_intr: error=0x40 { UncorrectableError }, LBAsect=614262308, high=36, low=10282532, sector=614262300 ide: failed opcode was: unknown end_request: I/O error, dev hdb, sector 614262300 hdb: dma_intr: status=0x51 { DriveReady SeekComplete Error } hdb: dma_intr: error=0x40 { UncorrectableError }, LBAsect=614262308, high=36, low=10282532, sector=614262308 ide: failed opcode was: unknown end_request: I/O error, dev hdb, sector 614262308なにやらエラーが出ている様子。
新しいHDDをUSBでつなぎ、初期化スクリプト(tar2disk)を改造してシステ
ムを新HDDに複製する。
# cat /sys/block/sda/size 1953525168
# mkdir /mnt/hda6/disk/kanso # cd /mnt/hda6/disk/kanso/ # mkdir mnt # cp /boot/.landisk/tar2disk . # ls -l drwxrwxrwx 1 nobody nobody 4096 2012-10-20 11:35 mnt -rwxrwxrwx 1 nobody nobody 20106 2012-10-20 11:34 tar2disk
# md5sum tar2disk f5f0d9365c1032f09edd6e73631e5caf tar2disk # ed tar2disk <tar2disk.diff.ed # ls -l drwxrwxrwx 1 nobody nobody 0 2012-10-21 19:55 mnt/ -rwxrwxrwx 1 nobody nobody 20511 2012-10-21 12:51 tar2disk -rwxrwxrwx 1 nobody nobody 1330 2012-10-21 19:55 tar2disk.diff.ed # md5sum tar2disk 5616609d2547166b61fb7202cf306669 tar2diskちなみに、オリジナルのtar2diskのmd5の値が上記と違う場合(そういうこと があるのかどうかわからないが)、差分が正しく適用できないと思う。その場 合は、firmwareのバージョンを上げるとよいかも。
# ls -l drwxrwxrwx 1 nobody nobody 0 2012-10-21 19:55 mnt/ -rwxrwxrwx 1 nobody nobody 91956 2012-12-15 11:57 patch -rwxrwxrwx 1 nobody nobody 20106 2012-10-21 12:44 tar2disk -rwxrwxrwx 1 nobody nobody 2340 2012-10-21 12:53 tar2disk.diff # ./patch tar2disk <tar2disk.diff patching file tar2disk # ls -l drwxrwxrwx 1 nobody nobody 0 2012-10-21 19:55 mnt/ -rwxrwxrwx 1 nobody nobody 91956 2012-12-15 11:57 patch -rwxrwxrwx 1 nobody nobody 20511 2012-10-21 12:51 tar2disk -rwxrwxrwx 1 nobody nobody 2340 2012-10-21 12:53 tar2disk.diff -rwxrwxrwx 1 nobody nobody 20106 2012-10-21 12:44 tar2disk.orig
ちなみに、ある方からメールをもらったところでは、tar2diskにはバージョ ン違いがあるようだ。バージョンが異なってもpatchが差分を当てるよう努力 する。# ls -l -rwxrwxrwx 1 nobody nobody 18856 2012-12-15 10:59 tar2disk # ./patch tar2disk <tar2disk.diff patching file tar2disk Hunk #5 succeeded at 394 (offset -8 lines). Hunk #6 succeeded at 611 (offset -7 lines). <中略> Hunk #14 succeeded at 752 (offset -38 lines). Hunk #15 succeeded at 765 (offset -38 lines). #上記のような Hunk 〜 メッセージが出た場合、出来上がったtar2diskがどう なっているかは、私はわからず、未検証です。# ./patch tar2disk <tar2disk.diff patching file tar2disk Hunk #3 FAILED at 399. Hunk #4 succeeded at 608 (offset -7 lines). Hunk #5 succeeded at 635 (offset -7 lines). <中略> Hunk #10 succeeded at 746 with fuzz 1 (offset -38 lines). Hunk #11 succeeded at 762 (offset -38 lines). 1 out of 11 hunks FAILED -- saving rejects to file tar2disk.rej # ls -l *.rej -rw-rw-rw- 1 nobody nobody 423 2012-12-15 17:22 tar2disk.rej上記のように失敗してrejectファイルが生成された場合は、パッチが当たって いないのであきらめてください。
# ./tar2disk sda : : + umount ./mnt + break + '[' 0 -ne 0 ']' + exit 0 #このスクリプトは、以下のことを行う。
# mount /dev/sda1 mnt # ls mnt # umount mnt # mount /dev/sda2 mnt # ls mnt # umount mnt # mount /dev/sda5 mnt # ls mnt # umount mnt # mount -t ufsd /dev/sda6 mnt # ls mnt # umount mntなお、オリジナルのtar2diskでは、setmaxコマンドでSET_MAX_ADDR的なこと をしているが、USB diskに対してはsetmaxが動作しなかったため、コメントア ウトしている。setmaxで何をしようとしているのか、それをしないとどんな影 響があるのかは不明。
# df Filesystem 1K-blocks Used Available Use% Mounted on rootfs 396623 237799 154728 61% / /dev/root 396623 237799 154728 61% / tmpfs 30412 808 29604 3% /mnt/tmpfs tmpfs 30412 0 30412 0% /lib/init/rw tmpfs 30412 0 30412 0% /dev/shm /dev/hdb1 303432 146772 153528 49% /boot /dev/hdb5 196271 15961 169868 9% /mnt/hda5 /dev/hdb6 970663364 55513764 915149600 6% /mnt/hda6