データを消さずに根気よく1つのhddでntfsをext3に変換する方法

今回はarchlinux上で試しました

前提と注意書き

hddが1つしかない時にする最終手段なようなものでバックアップが基本的にできない方法なのでバックアップをしたい方は一般的な方法をとってください。最悪の場合データが消えます
bootしているパーティションがあるhddを変換したい場合はubuntuなどのlivecdでgpartedとntfs-3gとntfsprogsの入ったものを使いましょう
ntfsに存在している一番大きい容量のファイルよりも空き容量が多くないとできないです*1
容量が大きいとすごく時間がかかります。場合によっては1日じゃ終わりません

やり方(簡潔な説明)

まずntfsに書き込めるようにntfs-3gと
ext3パーティションをいじれるようにgpartedと
gpartedでntfsを扱えるようにntfsprogsをパッケージ管理などで入れます
gpartedをroot権限で起動した後に
既にあるntfsの空き容量でext3パーティションを作成して
手動でntfsからext3にファイルをコピーした後に
ntfsからコピーした元のファイルを削除して
またgpartedで空き容量をext3にして…の以下ループです

ちなみにマウントしてあるとパーティションをいじれないので毎回マウントとアンマウントをしてください

やり方(コマンドなども書いた詳しめの説明)

先ほどのやり方をコマンドにするとこのような感じになります

archlinuxの場合でntfs-3gとgpartedとntfsprogsをいれるには

# pacman -S ntfs-3g gparted ntfsprogs

このように必要なものを入れて
他のディストリビューションの場合はそれぞれのパッケージ管理で入れます

ここに戻る(後述している文章を見ればこの行を書いている意味がわかります)

もしhddをマウントしていればgpartedで操作ができないので

# umount (マウント先)

このようにアンマウントしておきます

root権限でパーティションをいじるためのツールを起動します

# gparted

GUI上なのでコマンドは書けませんが操作としては
対象のntfsをリサイズして空き容量を減らして
何も割り当てられていない空間をext3に割り当ててから適用させます

それが終わればntfsext3をマウントします

# mount /dev/(ntfsのデバイス) (マウント先) -t ntfs-3g -o umask=0222
# mount /dev/(ext3のデバイス) (マウント先)

後はntfsからext3にコピーをするだけです
別にmvでも問題ありません。後でコピーした元のファイルを消す必要もなくなります

# cp -r (ntfsのマウント先) (ext3のマウント先)

一回でできない場合はext3の容量が許す分だけコピーします

コピーした分をntfsから削除します
mvを使った場合は既に消されているので不要です

# rm -rf (先ほどコピーした元のファイル)
まだ全てをコピーし終えていないなら「ここに戻る」と書かれた場所に戻って繰り返します

もし全てをコピーし終えたならば最後にgpartedでntfsの領域を消して全てをext3に割り当てたら終了です

この記事に関するメモ

CPUがPentium3の664.494Mhzと
メモリがPC133の256MB*2で512MBのパソコンで
USB1.1で外付けHDDの1TBを
一度に200GBほどresizeしてますがこのresizeだけでも3日ほどかかりました
USB1.1は転送速度が遅いのでそれが原因だとすればUSB2.0にするか直接HDDを繋ぐことができるならそうしたほうがいいかもしれない
というわけでPCIスロットに空きがあるならUSB2.0ボードを買ってきたほうがいいです
そうしないとこの場合は一ヶ月ぐらいはパソコンをつけっぱなしにするはめに…
私はお金がないので買えませんが…どうにかしてパソコンを借りるなりしてUSB2.0を使ったほうがいいですね
間違ってもUSB1.1で動作させないためにUSB2.0で動いているか確認するには

# lspci -v
(略)
00:1f.2 USB controller: Intel Corporation 82801AA USB Controller (rev 02) (prog-if 00 [UHCI])
        Subsystem: Intel Corporation 82801AA USB Controller
        Flags: bus master, medium devsel, latency 0, IRQ 11
        I/O ports at ff00 [size=32]
        Kernel driver in use: uhci_hcd
(略)

こんな感じのUHCIuhci_hcdと書いてあるもの場所に注目します
どれかわからない人は抜き差しするなりして変化のあるものを探しましょう
この場所にohci_hcdやuhci_hcdが書かれていればUSB1.xで
ehci_hcdと書かれていればUSB2.0です。たぶん。
それでも何度もパーティションをリサイズする必要があるならそれに時間をとられて
すごく時間がかかるので素直に別のhddにコピーしたほうが早いし安全です
もちろんその場合もusb1.1を使うのはやめときましょう。時間がかかりすぎます

もしちゃんと動いているか不安な場合は

% vmstat -p /dev/(ntfsのデバイス) 1

このようにすると読み書きの情報がリアルタイムで表示されて、数値が続けて動いているようなら恐らくちゃんと動いてます。そうであって欲しい
他には

% sar -d 1

% iostat 1

なんかもできると思います

*1:一時的にそのファイルを別の場所に移せるなら別です