Home > Latest topics

Latest topics > 自宅のPCが急死したので買い換えた(死んだWindows 10 PCから新しいWindows 10 PCへの移行)

宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能! シス管系女子って何!? - 「シス管系女子」特設サイト

自宅のPCが急死したので買い換えた(死んだWindows 10 PCから新しいWindows 10 PCへの移行) - Jan 31, 2021

次の号に掲載される予定のシス管系女子の原稿を制作中に、突然画面がグリッチしたかと思ったら無反応になり、電源長押しで再起動を試みても画面は真っ暗のまま、UEFIの画面すら出てこなくなってしまった。追加で挿してたグラボを抜いても状況変わらずだったので、マザーボードとかオンボードグラフィックスとかその辺がお亡くなりになったのだと思われる。前回調達して移行したのは2017年5月だったので、享年約3年9ヵ月だった。

作業中の原稿は、そのPCの起動ドライブだったSSD(M.2 NVMe)の中に閉じ込められてしまってたんだけど、AOTECHというブランドから出てるUSB接続の外付けHDDとして使えるようにするケース(当初、「M.2」という点だけに気を取られて「M.2 SATA」のみ対応のケースを買いそうになってしまったけど、Twitter上で「安い物はM.2 SATAのみ対応でM.2 NVMeと互換性が無いよ」と指摘を頂いて、ギリギリで回避できた。危なかった)を使って取り出して、別のPCでとりあえず完成まで仕上げて提出した。この間1週間もかかってない。

それと並行して進めなくてはならなかった新PCの調達だけど、そういう切羽詰まった状況で吟味してられなかったので、前回と同じくパソコン工房のBTOのクリエイター向け構成にした。4年の延長保証を付けずに購入したPCが3年9ヵ月で死んでしまったので、今回は4年保証も付けた。

移行は概ね、過去にやった以下のそれぞれの作業の合わせ技で行った。

最新の情報へのアップデートも兼ねて、改めて書き起こしておく。

移行の前提

  • 旧PCのSSD・HDDはすべて移植できている。
    • 旧PCの起動ディスクは、Cではなく別のドライブレターで認識されている。
  • 開発環境は、Bash on Ubuntu on WindowsからWSL1のUbuntuへの移行となる。
  • アプリケーション類は基本的に、既定のインストール先に入れている。Windowsのレベルでのカスタマイズはほとんど行っていない。

ローカルアカウントの作成

個人使用ではMicrosoftのアカウントを特に作らずに使ってきていたので、今回もローカルアカウントとして常用アカウントを作成した。もし後からMicrosoftのアカウントを作ることになったら、このローカルアカウントを紐付けて使うことになるはず。

初回起動時にうっかりMicrosoftアカウントでログオンしてしまった場合は、ローカルアカウントを作成してそちらに紐付けし直す手順に従って操作する必要がある。

コンピューター名の変更

家庭内LANで他のコンピューターから参照するときや、WSL1のホスト名などで度々目にする事になるので、初期状態のランダムな名前から、何らかのわかりやすいコンピューター名に変えておく。今回は旧PCの置き換えなので、旧PCとまったく同じ名前にした。

ファイルのコピー

  1. 「コンピューターの管理」で、移植したディスクのドライブレターを旧環境と同じに揃える。
  2. 旧マシンから移植したHDDから、以下の位置にある物を、新環境の対応するパスにコピーする。(ユーザの内部IDが変わっているので、コピーの前に、新環境のユーザにフルコントロールの権限を付与しておく必要がある……のだけれど、初めてアクセスする時にWindowsにアクセス権の付与を尋ねられて、OKしたらいい感じに処理してくれた)

    • *:\Users\(username)\AppData\Roaming (一般的なアプリのユーザー設定)
    • *:\Users\(username)\AppData\Roaming\npm (WindowsのNode.jsのnpmパッケージ)
    • *:\Users\(username)\AppData\Roaming\npm-cache (Node.js関連)
    • *:\Users\(username)\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe (Windows Terminalの設定)
      • AppData\Local 配下にはストアアプリの設定が保存されているようだが、WSLのファイルシステムなど安易に引き継いで大丈夫かどうか怪しい物もあるため、安全そうな物だけ引き継いだ。
    • *:\Users\(username)\AppData\Local\VirtualStore (WindowsのVirtual Store機能で自動的にリダイレクトされた書き込み先のファイル。古いアプリの設定がこちらに置かれている可能性がある。)
    • *:\Users\(username)\AppData\Local\node-gyp (Node.js関連のファイル)
    • *:\Users\(username)\Desktop (デスクトップ上のファイル)
    • *:\Users\(username)\Documents (ComicStudioとか、ここに設定を保存してる物がある)
    • *:\Users\(username)\Downloads (ダウンロード済みファイル)
    • *:\Users\(username)\Music (iTunesのライブラリはここにある)
    • *:\Users\(username)\Pictures (画像系のデータが保存されてることがある)
    • *:\Users\(username)\Videos (動画系のデータが保存されてることがある)
    • *:\Users\(username)\.* (GIMPなど、UNIX・Linux系由来のアプリはホーム直下の.で始まる名前のフォルダに設定を保存しがち)
    • *:\Users\Public\* (ユーザーに依らないデータ類)
    • *:\ProgramData (作りの古いアプリがここに設定を保存している場合があるのと、比較的最近のアプリもユーザに依らない設定はここに保存してるっぽい)
    • *:\Program Files\ 配下のアプリケーション(インストーラを使用せずインストールした物があるため)
    • *:\Program Files (x86)\ 配下のアプリケーション(インストーラを使用せずインストールした物があるため)
    • *:\Program Files (x86)\JustSystems\ATOK (ATOKのバージョンに依らない広辞苑とかの辞書はここにある。ATOK Syncでは同期されないので、この時点でコピーしておく必要がある。)
    • *:\Windows\Fonts (フォント。ファイルを全選択して新環境のC:\Windows\Fontsにコピーしようとすれば、フォントファイルはフォントとしてインストールして、そうでないファイルは警告が出るという感じでフォントだけ引き継げる)

    ただ、AppData配下やProgramData配下の情報は、新環境にそのまま上書きすると期待通りの動作を得られなくなる可能性もあるので、新規インストールからの再設定が容易な物(DropboxやATOK Syncなど)、同名のファイルがある旨のメッセージが出た物などは、スキップするのが賢明と思われる。

    今回のコピー時には、後述のシェル拡張で作ったシンボリックリンクが引っかかってコピーできない物がいくつか発生してたので、そこだけ後でリンクを作り直した。

  3. レジストリハイブをロードする方法を使って、旧環境のレジストリの内容を、HKEY_USERSに以下の要領で読み込む。
    • *:\Users\(username)\NTUSER.DATHKEY_USERS\old-(username)にロード
    • *:\Windows\system32\config\SOFTWAREHKEY_USERS\old-softwareにロード
  4. 以下の位置にあるレジストリキーの中から、新環境に引き継ぎたいアプリの設定をエクスポートする。
    • HKEY_USERS\old-(username)\Software
    • HKEY_USERS\old-(username)\Software\Mozilla\NativeMessagingHosts(アドオンのNative Messaging Hostの登録情報)
    • HKEY_USERS\old-software
    • HKEY_USERS\old-software\WOW6432Node
  5. エクスポートし終えたハイブをアンロードする。
  6. エクスポートした.regファイルをテキストエディタ(※自分は秀丸エディタを使用した。この段階では設定が引き継がれていないので、初期設定で試用期間扱いになっている)で開き、以下のように置換する。
    • HKEY_USERS\old-(username)HKEY_CURRENT_USER
    • HKEY_USERS\old-softwareHKEY_LOCAL_MACHINE\Software
  7. 編集後の.regファイルをダブルクリックしてインポートする。

レジストリの編集を伴う操作をしたので、このあたりで1回再起動しておくといい気がする。

Firefoxのインストール

何を置いてもまず最初に、Firefoxを既定の位置にインストールする。

現行バージョンのFirefoxはインストール先のパスとユーザープロファイルが紐付けられているため、これを起動すると、先の手順でAppData配下にコピーしたプロファイルが使われる。自分はFirefox Lockwise(Firefoxのパスワードマネージャ)に認証情報を集約するようにしていて、それにアクセスできないことには以後の諸設定がままならないため。

他のアプリケーション類のインストール

Thunderbird、ComicStudio、Adobe Illustrator、GIMP、Dropbox、ATOK Passport、iTunes、Windows Terminal、Node.js、シンボリックリンク作成用のシェル拡張など、必要なアプリケーションをインストールしていく。ユーザー設定やレジストリの情報を引き継ぎ済みであることから、この段階で「既にインストール済みのアプリを再度インストールし直した」状態になっていることが期待される。

DropboxやATOK Passport(ATOK Sync)は、Firefoxから取り出したログイン情報でログインすると、その時点で概ね完全な状態が再現される。

Windowsの環境変数PATHにNode.jsの設定が入ることと、ファイルのコピーでインストール済みのnpmモジュールが引き継がれたことで、この時点でweb-extなどのコマンドも使えるようになっていた。

WSL1のUbuntuの環境の引き継ぎ

今回はここがポイントだった。以前の環境で使用していたWSL1のUbuntuは、正確にはBash on Ubuntu on Windowsと呼ばれていた頃の物で、今アプリストアからインストールできるUbuntuと同じ物ではなかったので。

ストア版のUbuntuの場合、設定やファイルシステムは AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc にあるようなんだけど、BoUoWの場合は AppData\Local\Packages\lxss にある。見てみた感じではフォルダ構成も結構違うようだったので、すべてを引き継ぐのは諦めて、home配下だけコピーしてくることにした。

  1. 普通にストアからUbuntuをインストールして起動し、初期設定を終わらせる。
  2. 起動時の初期ディレクトリをWindowsのホームではなくWSL上のhomeにする。 Windows Terminalを使う場合、Windows Terminalの設定(settings.json)のWSL用の項目の "source": "Windows.Terminal.Wsl" をコメントアウトして、代わりに "commandline": "wsl.exe ~ -d Ubuntu" と書いておく。
  3. Windowsのファイルシステム上でWSLのファイルのパーミッションを保存できるようにするために、 sudo vim /etc/wsl.conf で設定ファイルを開いて以下の内容を保存する。

    [automount]
    options = "metadata,umask=22,fmask=111,case=off"
    

    マウントした既存のファイルや新たに作成したファイルが全部実行権限付きで認識されるとGitを使うのに不便なので、maskを指定して実行権限がつかないようにしておく。case=offは、WSL1からNTFSに作られたファイルやフォルダの名前の大文字小文字を区別しないための指定

  4. WSLのシェルを一旦閉じて、サービス一覧から LxssManager を探し、再起動する。これで、上記の設定が反映される。
  5. cp -r "/(ドライブレター)/Users/(username)/AppData/Local/Packages/lxss/home/(username)/*" "/(ドライブレター)/Users/(username)/AppData/Local/Packages/lxss/home/(username)/.*" ~/ などとして、旧環境のhome配下のファイルをコピーする。
  6. 旧環境でシンボリックリンクだった物がただのファイルになっていたりするので、削除してシンボリックリンクを作り直す。例えば以下の要領。
    • rm ~/Desktop; ln -s /mnt/c/Users/username/Destop ~/Desktop
  7. コピーされた ~/.bashrc には、コマンドヒストリの保存タイミングの変更も含めて、いくつかよく使う設定が書かれているので、この時点で source ~/.bashrc で読み込んでおく。設定している内容は過去のエントリの通り。
  8. sudo update-alternatives --config editor でデフォルトのエディタをvim.basicに切り替えておく。
  9. コピーしたSSHの秘密鍵を使えるようにする。 基本方針として、WSLのsshクライアントから直接秘密鍵を触らずに、Windows 10に最初から入ってるOpenSSHのssh-agentに鍵を読み込ませて、必ずrupor-github/wsl-ssh-agent経由で利用することにする。
    1. Windowsの「管理ツール」の「サービス」で「OpenSSH Authentication Agent」を手動で有効化し、自動起動するように設定する。
    2. Program Files以下のファイルを引き継がなかった場合) rupor-github/wsl-ssh-agentのリリース一覧から最新版のバイナリのwsl-ssh-agent.7zをダウンロードしてきて展開し、中身をC:\Program Files\wsl-ssh-agent\あたりに置く。
    3. ProgramData以下およびAppData以下のファイルを引き継がなかった場合)wsl-ssh-agent-gui.exe へのショートカットを C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp(全ユーザー向けの場合)か、%AppData%\Microsoft\Windows\Start Menu\Programs\Startup(自分のみの場合。Win-Rで shell:startup を実行して開かれるスタートアップフォルダ)に作り、ショートカットのプロパティを開いて「リンク先」に -socket "%temp%\ssh-agent.sock" と起動オプションを付け足す。これで、毎回起動時にssh-agentのためのソケットが作られるようになる。また、この時点ではまだ wsl-ssh-agent-gui.exe が起動していないので、ショートカットをダブルクリックして起動する。
    4. WSL1のUbuntu上のbashを起動する。
    5. ~/.bashrcを引き継がなかった場合)~/.bashrcexport SSH_AUTH_SOCK=/mnt/c/Users/$USER/AppData/Local/Temp/ssh-agent.sock という行を足して、source ~/.bashrc を実行して設定を反映する。これで、WSLの環境に入ると自動的にWindows側のssh-agentと繋がるようになる。
    6. chmod 700 ~/.ssh で、ディレクトリのパーミッションを他のユーザーから参照不可能なようにする。
    7. chmod 600 ~/.ssh/* で、ディレクトリのパーミッションを他のユーザーから参照不可能なようにする。
    8. ssh-add ~/.ssh/(秘密鍵) を実行し、秘密鍵を ssh-agent に読み込ませる。
    9. 他のホストにログインできることを確認する。
  10. Node.jsの最新版をn経由でインストールする(WSL1上のnodeはaptで入る物だと古いため)。
    1. sudo apt install nodejs npm でnをインストールするための準備をする。
    2. sudo npm install -g n でnをインストールする。
    3. sudo apt remove nodejs npm; sudo apt autoremove で不要になったパッケージを削除する。
    4. sudo n latest で最新のNode.jsをインストールする。

これでとりあえず最低限の引き継ぎはできているので、使いたいコマンドが動かないときは、適宜インストールし直していくことにした。


以上でだいたいの移行は完了したことにする。スタートメニューやタスクバーのピン留めの内容、自分でフォルダーを割り当てて追加していたツールバーなど、細かい部分がまだ未整備だけど、それは使う中で適宜設定していくつもり。

新環境のSSDの起動ドライブは、CrystalDiskInfoで見ると、IntelのSSDPEKNW010T9と出ていた。検索して出てきた仕様によると300TBWとのことで、現時点の情報に基づいて残り寿命を計算したら2年9ヵ月と出た。書き込み頻度が低いと、実際にはもっと長く持つことになるのだと思われる。旧PCの起動ドライブだったSSDも、今計算したら2年9月で、2年前に計算したときからあまり変わっていなかった。

分類:システム再構築, , 時刻:17:24 | Comments/Trackbacks (0) | Edit

Comments/Trackbacks

TrackBack ping me at


の末尾に2020年11月30日時点の日本の首相のファミリーネーム(ローマ字で回答)を繋げて下さい。例えば「noda」なら、「2021-01-31_home-win10-migration.trackbacknoda」です。これは機械的なトラックバックスパムを防止するための措置です。

Post a comment

writeback message: Ready to post a comment.

2020年11月30日時点の日本の首相のファミリーネーム(ひらがなで回答)

Powered by blosxom 2.0 + starter kit
Home

カテゴリ一覧

過去の記事

1999.2~2005.8

最近のつぶやき