背景
10年目のHDDが急にパフォーマンスがガタ落ちし、PC操作にも支障が出始めたので、クローン化を試したが、開始するたびに「フォーマットが必要です」と出てきてエラー終了するので、無理やり移行することにした。
てか、フォーマットが必要って言うからやったのに、それで再度クローン化を試したらまた言われるとか何?
ちゃんとやってくれよ。
なお、手作業でコピーしようとすると、ある程度のファイル数・フォルダ数を超えるとなぜかコピーそのものができなくなる。(エラーどころか、コピー中のあのウィンドウも出ない)
少しずつやることはできるが、めんどくさいのでプログラム組むことにした。
注意事項
更新日時などは引き継がれないので、そこだけ注意。
クローン化じゃないよ。
コピペを自動化したようなもの。
プログラム
Pythonのshutil.copy
を使って移植するだけ。
ただし、ファイルアクセスの権限を考慮して、PythonIDLEを管理者モードで実行して作業を行う。
プログラムは以下の通り。DドライブからFドライブに移行する。
import os, sys
import shutil
from glob import glob
from pathlib import Path
def f(path):
print(path)
newPath = list(path)
newPath[0] = "F"
newPath = "".join(newPath)
if not os.path.exists(newPath):
print(newPath)
os.makedirs(newPath, exist_ok=True)
items = glob(f"{path}/*")
for item in items:
try:
if Path(item).is_dir():
f(item)
else:
newPath = list(item)
newPath[0] = "F"
newPath = "".join(newPath)
if os.path.exists(newPath):
continue
shutil.copy(item, newPath)
except PermissionError:
with open("error_files.txt", "a", encoding="utf-8") as fp:
fp.write(f"{item}\n")
print("PermissionError:", item)
except OSError:
with open("error_files.txt", "a", encoding="utf-8") as fp:
fp.write(f"{item}\n")
print("OSError:", item)
fp = open("error_files.txt", "w", encoding="utf-8")
fp.close()
f(r"D:\\")
追記。
一部のファイルは謎に権限を要求されたり、破損してたりして処理が上手く行かない時があるので、それらはパスを記録してスキップするように変更。
あとで手作業で移行すれば良いでしょ判断。
あとがき
これで万事OKだわ。
てか、ホント何なの?
SSDのメーカーに合わせてSamsung Data Migrationとかいうソフト入れたのに、クローン元もSamsung限定なので今回は使えないし。
検索して出てきたEaseUSはクローン化が有料だし、MiniToolとかいうのは冒頭の状態になるし。
クローン化のハードウェアを買うのも考えたが、安く済むならそれに越したことはないし。(数年に一度しか使わないので)
今後、更新日時などの情報の引き継ぎは必要になれば追記する。