0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

死にかけHDDのデータ移行にPythonを使った話

Last updated at Posted at 2024-06-27

背景

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とかいうのは冒頭の状態になるし。
クローン化のハードウェアを買うのも考えたが、安く済むならそれに越したことはないし。(数年に一度しか使わないので)

今後、更新日時などの情報の引き継ぎは必要になれば追記する。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?