対処策を忘れないうちにメモっておきます。
<前提条件>移行作業はSystemrescueCDからブートし、旧HDD(250GB)から新HDD(400GB)にパーティション内のすべてのデータを cp -a でコピーする。
パーティション数は5個、これをマウントしてディレクトリとしてコピーすることになります。1個のパーティション内のデータ容量は、平均約17GBでした。したがって、マウント後のディレクトリのサイズも17GBとなります。
(パーティションは事前に適正なサイズに切っています。1パーティションあたり約80GB弱。基本パーティション3個、論理パーティション2個。)
「No space left on device」は次の2つの状況で発生しました。それぞれの対処方法を紹介します。
- コピーしているとき
- システムを起動している途中
1.コピーしているとき
(1)マウント
旧HDDがsdb、新HDDがsdc
# mount /dev/sdb1 /mnt/b1
# mount /dev/sdb2 /mnt/b2
中略…
# mount /dev/sdb6 /mnt/b6
# mount /dev/sdc1 /mnt/c1
# mount /dev/sdc2 /mnt/c2
中略…
# mount /dev/sddc6 /mnt/c6
(2)コピー
# cd /mnt/b1
# cp -a ./ mnt/c1
正常にコピーが終わりました。
# cd /mnt/b2
# cp -a ./ mnt/c2
このとき、「No space left on device」が表示され、コピーに失敗しました。
「No space left on device」は、i-nodeが枯渇すると表示されるそうです。
そして、そのパーティションのサイズを大きくするか、不要ファイルを削除するとi-nodeの使用を減らせるようです。
そもそも、i-nodeって何?==ウィキペディアより
う〜ん、ようわからんバイ。ファイルシステムに関連するもので、ファイルやディレクトリの情報を格納するデータベースかなぁ?おそらく、ファイル容量とは直接は関係していないようですね。実際に、df -hで見ると、容量には十分余裕があっても、i-nodeが満タンになっている場合もありました。
さっそく、チェックしてみます。
としてみると
「/livemnt/squashfs」のi-nodeの使用率が100%になっています。
中身を見てみると、/booや/sbinなどSystemrescueCDのシステムに関連したものが詰まっています。
他のディレクトリは数%台でした。
そもそも、CDなので、容量は増やせませんし、不要ファイルが何なのかも明確でないので削除できません。
おそらく、今回は、コピー、しかも-aなので元のファイルやディレクトリのデータ以外にもそれらのパーミッションやユーザ・グループ情報や階層構造などなど多くの情報を取ってくるので、通常のコピーより半端なくコピー量が増えていると思われました。
そこで、連続的にマウントし、そのディレクトリをコピーするのをやめて、1度に1つのパーティションしかコピーせず、しかも、コピー後は、アンマウントして解放することにしました。
(3)対処策
(先ほどのマウントポイントはすべてアンマウントして解除し、再度やり直します。)
①マウント(1組だけマウント)
# mount /dev/sdc1 /mnt/c1
②コピー(1つのディレクトリをコピー)
# cp -a ./ /mnt/c1
③アンマウント(マウント解除)
# umount /mnt/c1
④ ①〜③を/mnt/b6、/mnt/c6まで繰り返す。
少し面倒ですが、これで「No space left on device」の表示なしに、無事にコピーが終わりました。
2.システムを起動している途中
旧ハードディスクを取り外し、新ハードディスクを装着し、システムを起動させました。
(システムはデータ用のハードディスクとは別のディスクにインストールされています。今回は、データの移行だったので、システム自体はなにも変更されていません。)
(1)起動途中「No space left on device」が多発
sshdなどメインシステムが正常に起動できませんでした。
(2) i-nodeを確認
i-nodeの使用率はすべて数%でした。これではよくわからないので、実際にサイズの大きいファイルやディレクトリを表示させます。
(3)対処策
① 容量を無駄遣いしているファイルやディレクトリを探す
容量の大きい順に上位20を表示
② なぜか、/mnt/c5が存在し、容量が約16GB消費していた
③ 削除
# reboot <==再起動
「No space on left device」が消え、正常に起動しました。
本来は存在しないはずの/mnt/c5がなぜ存在していたのかは、最初、SystemrescueCDを使わず、直接システムを起動してコピーしていたので、そのとき、間違えて、システム内にマウントしたことが原因だと思います。
システム用のハードディスクの容量は20GBなので、/mnt/c5の約16GBは、かなり容量を食っていたはずです。