ASUSのルーター(RT-AC56S)を利用していますが、以下の投稿に記載したように複数のHDDを接続してNAS機能を活用しています。
wave.hatenablog.com
USB3.0ハブを経由して2TBのHDDを追加したのですが、Web管理画面からディスクのスキャンを実行すると、今回追加した2TBのHDDのみエラーが発生することに気付きました。
本体のUSB3.0ポートにハブを経由して既存の2台のHDDに加えて今回の2TBのHDDと、本体のUSB2.0ポートに1台の合計4台のHDDがルーターに繋がった状態であり、メーカー的には想定していないであろう使われ方であるが故に発生したエラーかと思いきや、そうではありませんでした。
以下に、本エラーの発生から解消方法までを記載します。
発生事象
ルーターの管理画面から2TBのHDDに対してスキャンを実行したところ、以下のスクリーンショットのようにエラー表示となりました*1。
この時のスキャン結果として表示されているログは以下の通りです。
ntfsck 3014.5.21 Checking NTFS Superblock ... Device name : /dev/sdb NTFS volume version: 3.1 Cluster size : 4096 bytes Current volume size: 2000398930432 bytes (2000399 MB) Current device size: 2000398933504 bytes (2000399 MB) Checking for bad sectors ... Scanning $MFT ... Checking directory structure ... Checking for orphaned files ... 0.00 percent completed 6.90 percent completed 13.80 percent completed 20.70 percent completed 27.61 percent completed 34.51 percent completed 41.41 percent completed 48.31 percent completed 55.21 percent completed 62.11 percent completed 69.01 percent completed 75.91 percent completed 82.82 percent completed 89.72 percent completed 96.62 percent completed 100.00 percent completed Scanning orphaned files completed. Checking attributes ... 0.00 percent completed 6.90 percent completed 13.80 percent completed 20.70 percent completed 27.61 percent completed 34.51 percent completed 41.41 percent completed 48.31 percent completed 55.21 percent completed 62.11 percent completed 69.01 percent completed 75.91 percent completed 82.82 percent completed 89.72 percent completed 96.62 percent completed 100.00 percent completed Failed to calloc 61047331 bytes: Cannot allocate memory Checking cluster allocation ... ERROR(12): Failed to setup allocation bitmap: Cannot allocate memory Syncing device ...
原因分析
ログ
上記ログにはDISK自体のエラーを示す情報は出力されておらず、末尾に出力されている以下のエラーメッセージが問題と考えられます。
Failed to calloc 61047331 bytes: Cannot allocate memory Checking cluster allocation ... ERROR(12): Failed to setup allocation bitmap: Cannot allocate memory
callocのエラーということで、端的にはメモリ確保に失敗しているだけのように見えます。
ルーター再起動や、他のHDDのマウントを解除してからスキャンを再試行しても同様のエラーメッセージが表示されるため、一時的なメモリ不足の類では無さそうです。
すなわち、ルーターの搭載メモリが2TBのDISKに対するスキャン(ntfsck)を遂行するのに十分な容量が無いのでしょう*2。
ASUSルータは強力ですが、RT-AC56Sは既に型落ちで当時のローエンドモデルですので必要最小限なスペックに削られているため、致し方ないのかもしれません。
実機調査・対応
多くのASUSWRT系のファームウェアを搭載したASUSルータにはTelnet又はSSHでログイン可能な機能が標準で搭載されています。
RT-AC56Sではデフォルトでは無効化されているので、Web管理画面からSSHログインをLAN側からのみ有効にしてログオンして調査してみます。
********@RT-AC56S:/tmp/home/root# free total used free shared buffers Mem: 125960 50220 75740 0 588 Swap: 0 0 0 Total: 125960 50220 75740
とういわけで、RT-AC56Sには約128MBのメモリが実装されているようです。これを増やしてやれば良さそうですが、一般のPCやサーバと違ってメモリを増設可能なようには作られていません。
一方でSwap領域が確保されていないことも上記freeコマンドの結果から判ります。念のため /proc/swaps を確認してみます。
********@RT-AC56S:/tmp/home/root# cat /proc/swaps Filename Type Size Used Priority
Swap領域は確保されていないことが再確認できました。ユーザが繋いだUSBストレージ系デバイスに、勝手にSwap領域を確保するのもおかしな挙動でしょうから、これはこれで普通な挙動なのでしょう。
とは言え、今はメモリアロケーションでエラーが発生しているので、Swap領域を作ってしまおうと思います。
私の環境では前述のように4台のHDDが接続されていますが、それぞれは以下のようにマウントされています。
********@RT-AC56S:/tmp/home/root# df -h Filesystem Size Used Available Use% Mounted on /dev/root 33.0M 33.0M 0 100% / devtmpfs 61.4M 0 61.4M 0% /dev tmpfs 61.5M 1.3M 60.2M 2% /tmp /dev/mtdblock4 62.8M 1.7M 61.0M 3% /jffs /dev/sda1 298.1G 130.0G 168.0G 44% /tmp/mnt/sda1 /dev/sdd2 148.9G 115.3G 33.7G 77% /tmp/mnt/sdd2 /dev/sdb 1.8T 392.4G 1.4T 21% /tmp/mnt/SEAGATE_HDD /dev/sdc1 931.5G 769.9G 161.7G 83% /tmp/mnt/IODATA
スキャンに失敗しているのは /dev/sdb ですので、それ以外のDISKにSwap領域を作成します。今回は最も使用率が低く、USB3.0接続の /dev/sda1 にSwapファイルを作成することにします。
既存の1TBのHDDのスキャンは正常に行えていることから、2TBのスキャンには単純に考えて2倍のメモリが確保できれば問題ないであろうということで、オンボードの約128MBと同程度のサイズのSwapファイルを作成します。
********@RT-AC56S:/tmp/home/root# dd if=/dev/zero of=/tmp/mnt/sda1/swap bs=1M count=128 128+0 records in 128+0 records out ********@RT-AC56S:/tmp/home/root# mkswap /tmp/mnt/sda1/swap Setting up swapspace version 1, size = 134213632 bytes UUID=09b46e4b-49ac-4bfb-9c18-0e5968e20820 ********@RT-AC56S:/tmp/home/root# swapon /tmp/mnt/sda1/swap
正常にSwap領域が確保できたか確認します。
********@RT-AC56S:/tmp/home/root# cat /proc/swaps Filename Type Size Used Priority /tmp/mnt/sda1/swap file 131068 0 -1 ********@RT-AC56S:/tmp/home/root# free total used free shared buffers Mem: 125960 95768 30192 0 444 Swap: 131068 0 131068 Total: 257028 95768 161260
totalが125960 → 257028に、freeが75740→161260に増加し、2倍以上の空き領域が確保できたのでスキャンを遂行するには(パフォーマンスは定かではありませんが、)十分なはずです。
再試行
Web管理画面から当該DISKのスキャンを試行したところ、以下のスクリーンショットのように、正常に完了しました。
ログを確認すると、従来はメモリアロケーションに失敗して行えていなかった、cluster allocation以降のチェックも正常に完了していることが判ります。
ntfsck 3014.5.21 Checking NTFS Superblock ... Device name : /dev/sdb NTFS volume version: 3.1 Cluster size : 4096 bytes Current volume size: 2000398930432 bytes (2000399 MB) Current device size: 2000398933504 bytes (2000399 MB) Checking for bad sectors ... Scanning $MFT ... Checking directory structure ... Checking for orphaned files ... 0.00 percent completed 6.90 percent completed 13.80 percent completed 20.70 percent completed 27.61 percent completed 34.51 percent completed 41.41 percent completed 48.31 percent completed 55.21 percent completed 62.11 percent completed 69.01 percent completed 75.91 percent completed 82.82 percent completed 89.72 percent completed 96.62 percent completed 100.00 percent completed Scanning orphaned files completed. Checking attributes ... 0.00 percent completed 6.90 percent completed 13.80 percent completed 20.70 percent completed 27.61 percent completed 34.51 percent completed 41.41 percent completed 48.31 percent completed 55.21 percent completed 62.11 percent completed 69.01 percent completed 75.91 percent completed 82.82 percent completed 89.72 percent completed 96.62 percent completed 100.00 percent completed Checking cluster allocation ... 0.00 percent completed 6.90 percent completed 13.80 percent completed 20.70 percent completed 27.61 percent completed 34.51 percent completed 41.41 percent completed 48.31 percent completed 55.21 percent completed 62.11 percent completed 69.01 percent completed 75.91 percent completed 82.82 percent completed 89.72 percent completed 96.62 percent completed 100.00 percent completed Checking cluster allocation bitmap ... Checking $MFT bitmap ... 0.00 percent completed 6.90 percent completed 13.80 percent completed 20.70 percent completed 27.61 percent completed 34.51 percent completed 41.41 percent completed 48.31 percent completed 55.21 percent completed 62.11 percent completed 69.01 percent completed 75.91 percent completed 82.82 percent completed 89.72 percent completed 96.62 percent completed 100.00 percent completed Checking directory structure second time ... Space in use : 421290 MB (21.1%) Done NTFS checking and repair on device '/dev/sdb'. Syncing device ...
備考
上記対応で、貧弱なメモリ搭載量の機器でもSwap領域を追加してやることで問題無く大容量HDDのスキャンを行うことができました。
なお、Swap領域は永続的に確保されているわけではありませんので、ルータの再起動後に大容量HDDのスキャンを行う必要があれば、再度Swap領域を割り当てる必要があります。
以上。
*1:USB3.0アイコンが赤く表示されているが、その右上の"3"はエラーの数ではなく当該ポートに接続されているデバイスの数。
*2:搭載メモリは公開されていない。 RT-AC56S | Wi-Fi | ASUS 日本