MacBookPro 2012 Mid SSD換装・交換方法手順 ~使える2010代前半 MacBook~
Macintosh
2019.08.262024.04.09
過去に「Mac で Windows(VM)を動かす」等で申しておりますが、そろそろ私が教室で利用しております MacBook の立ち上がりや動作が明らかに重くなってきており、そろそろ買い替えの時期ではありますが、まだまだ筐体は綺麗ですしこの形に愛着が有ります。また2010年代前半の MacBook は簡単に HDD を SSD に換装・交換が可能なので行ってみます。
初めての方でも行えますように、必要なパーツ・道具の選択を含めた、1から進めて行きますのでページの手順通り進んで行けば大丈夫です。
今回 MacBook Pro 2012 Mid で SSD 換装・交換を行いましたが、全ての方に推奨される物では御座いません。最悪 MacBook 本体を壊してしまう事も考えられます。
また、SSD の換装・交換やメモリーの 16GB 増設で USB や周辺ポートに不具合が出て来る場合も御座います。 分解・増設はご自身の責任にて宜しくお願い致します。
動画解説
VIDEO
関連動画
VIDEO
MacBook SSD 換装・交換できるモデルとできないモデル
MacBook Mid 2010 以前(2.5inchSSD)
MacBook Pro Mid 2012 以前(2.5inchSSD)
MacBook Pro Retina 2012/Early2013(専用SSD)
MacBook Pro 2016 2017 タッチバー無(PCIe SSD)
MacBook Air Late2010 Mid 2011(専用SSD)
MacBook Air Mid 2013 Early 2014-2016(PCIe SSD)
上記が SSD 換装・交換できるモデルです。ここに記述がないモデルは SSD 換装・交換ができないモデルとなります。
ただ私の見落としも考えられますので、念のためご自身でも SSD 換装・交換可能か調べてみた方が良いと思われます。下記 URL にてご自身がお持ちの MacBook 箇所の “技術仕様” をクリックしてご確認下さい。
MacBook Pro のモデルを識別する
MacBook Air のモデルを識別する
準備するもの
MacBook SSD換装・交換用
・バックアップ用 HDD
普段からご使用になられている HDD で構いません。容量はご利用の Mac HDD 容量以上の物で、ファイルが書き込まれて(保存されて)いない空の物が良いでしょう。
・2.5inch SSD
こちらもご利用の Mac HDD 容量以上の物が良いでしょう。今回は使用している Mac HDD と同容量の SSD 500GBを購入致しました。
Samsung SSD 500GB 860EVO や Crucial SSD 500GB MX500 辺りが人気がある様です。また当教室でも使用しております。また最近では VM で Windows も使いたいのでという事で、初めから大きめの 1TB SSD を選択される方も居られます。確かに昔に比べて 1TB SSD が安くなっていますね。
サムスン(SAMSUNG)
最大転送速度 : 読出 550MB/秒 書込 520MB/秒
Crucial(クルーシャル)
[Crucialとは] Crucial (クルーシャル) は、半導体メーカーであるMicron (マイクロン)の個人向け製品のブランド名です。Micron 3D NANDフラッシュテクノロジーを採用しており、低消費電力でありながら高いコストパフォーマンスを実現しています
Crucial(クルーシャル)
[Crucialとは] Crucial (クルーシャル) は、半導体メーカーであるMicron (マイクロン)の個人向け製品のブランド名です。Micron 3D NANDフラッシュテクノロジーを採用しており、低消費電力でありながら高いコストパフォーマンスを実現しています
SP Silicon Power
SATA3内蔵2.5インチSSD
KIOXIA
お使いのパソコンを手軽にアップデートできるSATA接続のSSD。HDDからの換装で、システム起動やファイル転送の高速化が可能。※出荷時は未フォーマットです。認識しない場合はディスクの管理から初期化フォーマットください。
・+00 ドライバー・T6 トルクスドライバー
+00 は通常の精密ドライバーセットに入っていると思われます。更に T6 が入っているセットをお持ちでしたら購入せずに大丈夫です。
HEARTHFUN
【25 in 1 精密ドライバー-】合金鋼のビット硬度は60HRC(公差:±3HRC)- 高硬度、耐衝撃性、高い耐久性の利点。ペン型ドライバーの一体成形プロセスで、と特殊な滑り止め処理、円滑なエッジで快適な手触りが得られます。ターンキャップ設計のアルミニウム合金ドライバーに、ビットのサンドブラスト加工された表面陽極酸化処理、防錆。高い耐久性があるので、長く安心でご使用いただけます
BRIGHT DIY
【PENDORAシリーズ】「収納状態が美しくて気持ちいいペン型ドライバー」として多数メディアにて報道され、国内外のクラウドファンディングにて2500人以上の方に支援をいただき商品を開発いたしました。工具としての機能性だけでなく、スリムなデザイン性を追求し、どんな時でもスタイリッシュに持ち運びDIYすることができる精密電動ドライバーセットになります。
iFixit
すべての適切なツールを持っている修理*iFixitオリジナルの電子機器対応ツールキット。パソコン、スマートフォン、タブレット、ゲームの修理を目的に設計され、iFixitで公開されている何千もの無料修理マニュアルに対応しています。マニュアルの数千からのデータを使用して5年以上にわたって開発。
メモリー(ついでに RAM を増やしたい方のみ)
・メモリー
こちらはあくまでも余談的な物になってしまいますが、せっかくバックパネルを開けるのですから序にメモリーも増設 UP してしまいましょう。今回は使用しているメモリーは俗に言う低電圧版メモリーと言うやつです。
下記の公式 Mac メモリ交換ページには、MacBook Pro 2012 Mid は最大 8GB となっておりますが、元々付いている 4GBx2 を外し 8GBx2 を挿入で 16GB で認識します。ご自身の MacBook Pro も可能か確認してみて下さい。
SP Silicon Power
保証期間は「無期限保証」です。*商品の仕様・外観は製造時期 / 発送のタイミングにより画像と異なる場合がございます。
MacBook Pro:メモリの取り外し方法と取り付け方法
Time Machine でバックアップ
皆さんご存知と思われますので詳しくはご説明致しませんが、
初めて外付け HDD ドライブを Mac に接続すると 、Time Machine でバックアップを作成するかどうか問い合わせが表示されます。ここで【バックアップディスクとして使用】をクリックすると、Time Machine でバックアップを取ることが出来ます。必ず取っておきましょう。
Time Machine で Mac をバックアップする
玄人志向
6TB×2台の最大12TBの大容量ドライブ動作可能。
ハードウェア作業
HDD を外す
バックパネル(裏ぶた)を開ける
この MBP 2012 Mid では、上4 右1 下4 左1 本 計 10 本のビスでバックパネルが止まっております。これを +00 ドライバーで外して行きましょう。
バッテリーコネクターを外す
画面右下のバッテリーコネクターを外しておきましょう。一気に引っ張らずに、左右に揺らしながら上に抜きます。
補助ステーを外す
そうそうネジを外す時に位置を覚えておく、及び失くし防止の為、この画像左手の下に少し見えておりますが、水道屋広告のマグネットステッカーを置いて、ネジ穴のある位置に立てています。磁力が弱すぎない物を選んで使っています。但しこの方法はネジ数が少ないものに限ります。
Panasonic Let’s note 様な異常な量のネジ数の場合は、素直にバックパネルをスキャンしてその画像に両面テープで貼り付けております。
話を戻しまして、左下にあるのが HDD です。この HDD は DVD ドライブとの間にある 2本のビスで止められた黒いステーで止められています。このステーを外します。
HDD SATA コネクターを外す
HDD は本体と HDD フィルムコネクターで接続されていますので、そっと持ち上げゆっくりと引き抜いて下さい。中央を持ち一気に抜くという感じよりも、右・左・右・左と交互に力を掛けながら引く感じでしょうか。(どういう感じか説明し難いですが。)
HDD 止めネジを外す
HDD を本体に設置する為に HDD 4か所に付いていた 4本のネジを外して行きます。このネジを外す時に前項に説明致しました
トルクスドライバー T6 が必要になります。 ヘックスローブ・ヘクスローブ(6個の突起・星形)ドライバーと呼ばれている物も同じドライバーです。このネジは元に戻す時に使用しますので無くさないようにして下さい。
SSD を取り付け
SSD に固定ネジを付ける
先ほど HDD から外した 4本のネジを止めて行きます。SSDのサイドに左右 2箇所づつネジ穴があると思いますので止めていきます。
SSD にタブを付ける
先ほど外した HDD を見て下さい。HDD の中ほどに “タブ” (シール状のつまみ)が貼ってあると思います。これをゆっくりと剥がし、SSD の大体同じ位置に貼っておきましょう。この Mac の HDD は取り外しが窮屈ではないので無くても大丈夫とは思いますが、一応元の HDD の状態と同じにしておきましょう。
SSD にコネクターを接続する
フィルムコネクターを SSD に接続します。SSD の中のコネクター配列を確認して差し込んで下さい。無理な力は要りませんのですんなり入らないようでしたら、裏表が逆さかもしれませんので、コネクター配列を確認して下さい。
補助ステーを元に戻す
SSD を格納して上部を黒いステーで止めます。ここ以降 ドライバーは +00 ですので注意して下さい。
バッテリーコネクターを元に戻す
軽く上から均等に圧をかけコネクターをハメ込みます。力加減に注意して下さい。最後にしっかりとハマっている事を確認して下さい。
バックパネルをはめて、元の状態に戻す
バックパネルをはめ、ネジ 10本を止めます。対角に軽く止めて行き最後に増し締めを行って下さい。ハード面の作業はこれで終わりになります。
ソフトウェア作業
Mac 復旧作業
macOS 復元を起動する
Mac の電源を入れて直ぐにキーボードのキー
⌘ command +
R を組み合わせて押し続けます。Apple ロゴマーク(林檎)もしくは、回転する地球儀が表示されたら、キーから指を放して下さい。また今回は先に有線 LAN ケーブルを接続した状態で復元を行っておりますので、無線 LAN の接続設定はパスされます。
macOS 復元について
言語設定
今回の場合、地球儀が回り続け10分前後待たされて、ようやく言語選択画面が表示されます。”主に日本語を使用する”をクリックし、続けて
(右矢印)をクリックします。
ディスクユーティリティの起動
まだ macOS を立ち上げることは出来ません。まず “OS X ユーティリティ” の “ディスクユーティリティ” をクリックして続けて、
続ける をクリックします。
SSD をフォーマットする
設置しました SSD は何もインストールされておりませんので、まずは SSD をフォーマットします。
左欄上部に新しく設置した SSD が表示されますので、”名称未設定” 箇所をクリックして、右欄上部 “消去” 箇所をクリックします。今度は右下にある
消去… をクリックします。フォーマットが終わりましたら
完了 をクリックして
× (終了)ボタンをクリックして “ディスクユーティリティ” を終了します。
まずは、復旧作業ー失敗編
Time Machine バックアップから復元
“OS X ユーティリティ” に戻りましたら、”Time Machine バックアップから復元” をクリック、続けて下に表示されている
続ける をクリックします。
システムの復元
“システムの復元” が表示されます。下に表示されている
続ける をクリックします。
バックアップ済みデータの選択
“バックアップ済みデータの選択” が表示されます。まだ バックアップした外付け ストレージ(HDD等) を接続していない場合、”Time Michine バックアップを検索中…” と表示されます。
バックアップが表示されましたら、そのストレージをクリックして、更に下に表示されている
続ける をクリックします。
バックアップの選択
“バックアップの選択” では最新のバックアップ日時の物をクリックし。下に表示されている
続ける をクリックします。
インストール先の選択 ― ここで失敗
“インストール先の選択” で Mac 本体 SSD が表示されをクリックし、表示されている [復元] をクリックしたいのだが、いくら待っても SSD が表示されず。何回か
⌘ command +
R で試みたものの撃沈・・・。 “ディスクユーティリティ” で SSD のマウントを試しても駄目でした。
◆追記 接続先が見つからない
ここで接続先が見つからなかったのは、メモリーを規格範囲以上に積んでいるからではないか。と言うご指摘を頂きました。実際に検証した訳ではありませんので絶対確実とは言えませんが、同じような境遇に合われた方は一度、増設前の標準メモリー値に戻して作業を行ってみて下さい。
確かに私の場合、16GB にメモリー増設をしたまま行いましたので、流れる電圧や電流の不足により認識されないという事が考えられますね。いつか検証できれば良いのですが。
◆追記2 USB が繋がらない?!
SSD 換装・交換後、USB2.0 への接続が怪しい動きをしています。初めはロジックボードが逝ったのかと思ったりしていましたが、次回起動時には何の問題もなく接続出来たりします。これも前記述から考えられる不具合の一つの様な気が致します。
精神的に使えたり使えなかったりする事がストレスになるので、下紹介の「Thunderbolt
USB3.0 変換アダプタ」を購入致しました。少々お高くてビックリ(ロジックボード交換 ¥30,000 からを考えれば全然。)なのですが、元々 MacBookPro 2012 Mid は USB3.0ポートを持ちません(技術仕様 を確認してみたところ黒ポートも USB3 の様です。)ので、USB3.0 ポートの増設と考えれば納得出来るのではないでしょうか。
Kanex
Thunderbolt - ギガビット イーサネット + USB 3.0 ポート アダプター
DeLOCK
コネクター: Thunderbolt (オス)- USB 3.0 TypeA (メス)
しかたがないので、遠回り復旧作業ー成功!?編
OS X を再インストール
“OS X ユーティリティ” の “ディスクユーティリティ” で SSD のフォーマットまでは一緒。”ディスクユーティリティ” を閉じて、”OS X ユーティリティ” の “OS X を再インストール” をクリックし、右下に表示されている
続ける をクリックします。
OS X 10.8 Mountain Lion インストール導入画面
先の方法に失敗してしまいましたのでやむなく、今回使用している MacBookPro 2012 Mid の工場出荷状態、デフォルト
OS X Mountain Lion(OS X Lion であり、初めての App Store からのダウンロードアップグレードが OS X Mountain Lion なので以下に続きます。) を再インストールします。下に表示されている
(右矢印)[続ける] をクリックします。
OS X ダウンロード ポップアップ
“OS X ダウンロードして復元するために、お使いのコンピュータの適格性が Apple で検証されます。” が表示されます。
続ける をクリックします。
OS X Mountain Lion 利用規約
“このソフトウェアのインストールを続けるには、ソフトウェアの使用許諾契約の条項に同意する必要があります。”とありますので同意しなければ次に進めませんので、下に表示されている
(右矢印)[同意する] をクリックします。
同意 ポップアップ
“ソフトウェアの使用許諾契約の条件を読んだ上で同意します。” 先ほども思いましたがポップアップではなくドロップダウンと言うべきか・・・が表示されます。
同意する をクリックします。
OS X Mountain Lion インストールストレージの選択
先の失敗時には現れなかったインストール先の選択で、しっかりと SSD の”名称未設定 ” が表示されております(何故にここではマウントされているのでしょう。先ほどは全く表示されなかったのに。)ので、HDD アイコン(図)をクリックして更に下の
(右矢印)[インストール] をクリックします。
OS X Mountain Lion インストール待ち
“追加コンポーネントをダウンロード中です。コンピュータは自動的に再起動します。” 残り時間が表示されていると思います。Mac から離れてしばらくの間、他の作業をして過ごしましょう。
OS X Mountain Lion インストール待ち 2
残りがあと少し。
OS X Mountain Lion インストール待ち 3
ようやくプログレスバーが終わったと思ったら、まだ有るのですね・・・。はいっ、いくらでも待ちます。
OS X Mountain Lion インストール完了
前の画面から約10分、インストール完了です。再起動させて頂きます。
ようこそ
再起動後の地域設定ですが今回は “日本” しか出ていませんので、下の
(右矢印)[続ける] をクリックします。
キーボード入力環境を選択
ここはご自分の使用方法により設定を変更して下さい。変更が終わりましたら下の
(右矢印)[続ける] をクリックします。
この Mac に情報を転送 1
“情報の転送方法を選択してください。” の箇所を “別のディスクから” を選択してから、
(右矢印)[続ける] をクリックします。
この Mac に情報を転送 2
“転送元の Mac、Time Machine バックアップ、またはほかの起動ディスクを選択してください。” で表示されているバックアップ HDD アイコン箇所をクリックしてから、
(右矢印)[続ける] をクリックします。
この Mac に情報を転送 3
“情報を転送するバックアップを選択してください。” で表示されている Macintosh HD(Mac PC のアイコン)箇所をクリックしてから、
(右矢印)[続ける] をクリックします。
この Mac に情報を転送 4
“この Mac に転送する情報を選択してください。” で表示されているデータを選択するのですが、全ての ☑ が付いた状態で OK ですのでそのままにして、
(右矢印)[続ける] をクリックします。
情報を転送中
“◯◯◯◯” のバックアップから情報をこの Mac に転送中です。 >表示になります。ここからは Mac ・バックアップ HDD ・転送データ量により異なりますが、かなりの時間が掛かります。数時間は覚悟して下さい。
移行が完了しました 1
“移行したデータは、再起動した後に使用できます。コンピュータは◯◯後に自動的に再起動します。” ただ、この”今すぐ再起動”を押せた方はかなり貴重な存在かもしれませんね。
移行が完了しました 2
“データの移行が完了し、使用できるようになりました。”
(右矢印)[終了] をクリックします。
ここまでで終了と行きたいところですが、まだ最後の設定が待っています。
TRIM を設定
TRIM とは
Wikiでは、
TRIM コマンド – ソリッドステートドライブ(SSD)の書き込み速度の低下を回避するためのコマンド。
とあります。
システム情報で確認
システム情報 アプリを起動して、左欄 “SATA/SATA Express” をクリックします。右欄に “TRIM サポート” を探してみましょう。
” いいえ ” になっていると思われますので、変更します。
ターミナルを起動
次にターミナル アプリを起動して、
sudo trimforce enable
と入力。 (鍵マーク)が表示されますので、Mac へログインする時の 「パスワード」 を入力して下さい。
Are you sure you wish to proceed (y/N)? (本当に続行してよろしいですか?) と問い合わせてきますので、「 y 」 を入力。
Your system will immediately reboot when this is complete. Is this OK … (y/N)? (完了しましたらシステムを直ぐに再起動してもよろしいですか?)
と問い合わせてきますのでここでも、「 y 」 を入力して下さい。
自動的に再起動が掛かります。これで Trim の設定は終わりで、 SSD 換装・交換も終了です。
どの位早くなったのか
HDD vs SSD
左が元々 Mac に搭載されていた HGST の HDD 右が samsung SSD になります。実際には HDD の方が5時間ぐらい回し続けてまだ終わっていない状態です。フラグメンテーションが酷すぎて一杯一杯だったのでしょう。検証結果としては不十分ですが一応記しておきます。
TRIM 無し vs TRIM 有り
左が TRIM 無し SSD 右が TRIM 有り SSD になります。TRIMに関しましては使い続けていくうちに違いが出てくるものなので、今すぐにドウコウと言う問題ではないのですが、こちらも一応記しておきます。
おわりに
起動に掛かる時間も早くなり、これでもう暫くは使って行けそうです。もう直ぐお披露目される macOS Catalina が必要以上に重くならない事を祈ります。
最後までお読み頂き有難う御座います。また長い時間の作業、お疲れ様でした。
◆追記3 ご注意
初めて Mac を買われる方は、OS 無しの中古は買わない様お気を付け下さい。過去の macOS をダウンロード出来るのは、ご自身がダウンロードした事のあるバージョンのみになります。過去に一度も OS アップグレードした事が無い方も同様になります。
Mojave からは App Store に過去ダウンロードした macOS が表示されなくなりました。Homebrew と mascli を使ったダウンロードも私自身は成功しておりませんので、過去の mscOS をダウンロードしたい場合、macOS High Sierra の段階でダウンロードしておきましょう。
MacBook Pro 2012 Mid は Catalina にアップグレード可能ですが、32Bit アプリが使えなくなっております。お気に入りのアプリが 32Bit バージョンしかない場合、無理にアップグレードしない方が良いと思われます。(VM を使って過去のバージョンをインストールで回避する方法も有ります。 )
【ぱそこん相談室 メイン】https://www.youtube.com/c/Pcsdn_com
【ぱそこん相談室 別室】http://bit.ly/sepa_room
【ぱそこん相談室 X】https://x.com/pc_sdn
",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"meta",v:[{b:/<\?xml/,e:/\?>/,r:10},{b:/<\?\w+/,e:/\?>/}]},{cN:"tag",b:"?",e:"/?"+">",c:[{cN:"name",b:/[^\/><\s]+/,r:0},t]}]}});hljs.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"section",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:""+">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"quote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"^```w*s*$",e:"^```s*$"},{b:"`.+?`"},{b:"^( {4}| )",e:"$",r:0}]},{b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"string",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"symbol",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:/^\[[^\n]+\]:/,rB:!0,c:[{cN:"symbol",b:/\[/,e:/\]/,eB:!0,eE:!0},{cN:"link",b:/:\s*/,e:/$/,eB:!0}]}]}});hljs.registerLanguage("php",function(e){var c={b:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},i={cN:"meta",b:/<\?(php)?|\?>/},t={cN:"string",c:[e.BE,i],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},a={v:[e.BNM,e.CNM]};return{aliases:["php3","php4","php5","php6"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.HCM,e.C("//","$",{c:[i]}),e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:/<<<['"]?\w+['"]?$/,e:/^\w+;?$/,c:[e.BE,{cN:"subst",v:[{b:/\$\w+/},{b:/\{\$/,e:/\}/}]}]},i,{cN:"keyword",b:/\$this\b/},c,{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",c,e.CBCM,t,a]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},t,a]}});hljs.registerLanguage("json",function(e){var i={literal:"true false null"},n=[e.QSM,e.CNM],r={e:",",eW:!0,eE:!0,c:n,k:i},t={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(r,{b:/:/})],i:"\\S"},c={b:"\\[",e:"\\]",c:[e.inherit(r)],i:"\\S"};return n.splice(n.length,0,t,c),{c:n,k:i,i:"\\S"}});hljs.registerLanguage("perl",function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",r={cN:"subst",b:"[$@]\\{",e:"\\}",k:t},s={b:"->{",e:"}"},n={v:[{b:/\$\d/},{b:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{b:/[\$%@][^\s\w{]/,r:0}]},i=[e.BE,r,n],o=[n,e.HCM,e.C("^\\=\\w","\\=cut",{eW:!0}),s,{cN:"string",c:i,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",r:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",r:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",r:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",r:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",r:5},{b:"qw\\s+q",e:"q",r:5},{b:"'",e:"'",c:[e.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[e.BE]},{b:"{\\w+}",c:[],r:0},{b:"-?\\w+\\s*\\=\\>",c:[],r:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\/\\/|"+e.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",r:0,c:[e.HCM,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",r:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[e.BE],r:0}]},{cN:"function",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",eE:!0,r:5,c:[e.TM]},{b:"-\\w\\b",r:0},{b:"^__DATA__$",e:"^__END__$",sL:"mojolicious",c:[{b:"^@@.*",e:"$",cN:"comment"}]}];return r.c=o,s.c=o,{aliases:["pl","pm"],l:/[\w\.]+/,k:t,c:o}});hljs.registerLanguage("ruby",function(e){var b="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",r={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},c={cN:"doctag",b:"@[A-Za-z]+"},a={b:"#<",e:">"},s=[e.C("#","$",{c:[c]}),e.C("^\\=begin","^\\=end",{c:[c],r:10}),e.C("^__END__","\\n$")],n={cN:"subst",b:"#\\{",e:"}",k:r},t={cN:"string",c:[e.BE,n],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{b:/<<(-?)\w+$/,e:/^\s*\w+$/}]},i={cN:"params",b:"\\(",e:"\\)",endsParent:!0,k:r},d=[t,a,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{b:"<\\s*",c:[{b:"("+e.IR+"::)?"+e.IR}]}].concat(s)},{cN:"function",bK:"def",e:"$|;",c:[e.inherit(e.TM,{b:b}),i].concat(s)},{b:e.IR+"::"},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":(?!\\s)",c:[t,{b:b}],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{cN:"params",b:/\|/,e:/\|/,k:r},{b:"("+e.RSR+"|unless)\\s*",k:"unless",c:[a,{cN:"regexp",c:[e.BE,n],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}].concat(s),r:0}].concat(s);n.c=d,i.c=d;var l="[>?]>",o="[\\w#]+\\(\\w+\\):\\d+:\\d+>",u="(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>",w=[{b:/^\s*=>/,starts:{e:"$",c:d}},{cN:"meta",b:"^("+l+"|"+o+"|"+u+")",starts:{e:"$",c:d}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:r,i:/\/\*/,c:s.concat(w).concat(d)}});hljs.registerLanguage("makefile",function(e){var i={cN:"variable",v:[{b:"\\$\\("+e.UIR+"\\)",c:[e.BE]},{b:/\$[@%\^\+\*]/}]},r={cN:"string",b:/"/,e:/"/,c:[e.BE,i]},a={cN:"variable",b:/\$\([\w-]+\s/,e:/\)/,k:{built_in:"subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value"},c:[i]},n={b:"^"+e.UIR+"\\s*[:+?]?=",i:"\\n",rB:!0,c:[{b:"^"+e.UIR,e:"[:+?]?=",eE:!0}]},t={cN:"meta",b:/^\.PHONY:/,e:/$/,k:{"meta-keyword":".PHONY"},l:/[\.\w]+/},l={cN:"section",b:/^[^\s]+:/,e:/$/,c:[i]};return{aliases:["mk","mak"],k:"define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath",l:/[\w-]+/,c:[e.HCM,i,r,a,n,t,l]}});hljs.registerLanguage("css",function(e){var c="[a-zA-Z-][a-zA-Z0-9_-]*",t={b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\w-]+\(/,rB:!0,c:[{cN:"built_in",b:/[\w-]+/},{b:/\(/,e:/\)/,c:[e.ASM,e.QSM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"number",b:"#[0-9A-Fa-f]+"},{cN:"meta",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"selector-id",b:/#[A-Za-z0-9_-]+/},{cN:"selector-class",b:/\.[A-Za-z0-9_-]+/},{cN:"selector-attr",b:/\[/,e:/\]/,i:"$"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{b:"@",e:"[{;]",i:/:/,c:[{cN:"keyword",b:/\w+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[e.ASM,e.QSM,e.CSSNM]}]},{cN:"selector-tag",b:c,r:0},{b:"{",e:"}",i:/\S/,c:[e.CBCM,t]}]}});hljs.registerLanguage("java",function(e){var a="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",t=a+"(<"+a+"(\\s*,\\s*"+a+")*>)?",r="false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",s="\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",c={cN:"number",b:s,r:0};return{aliases:["jsp"],k:r,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{b:/\w+@/,r:0},{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",r:0},{cN:"function",b:"("+t+"\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:r,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:r,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},c,{cN:"meta",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("cpp",function(t){var e={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},r={cN:"string",v:[{b:'(u8?|U)?L?"',e:'"',i:"\\n",c:[t.BE]},{b:'(u8?|U)?R"',e:'"',c:[t.BE]},{b:"'\\\\?.",e:"'",i:"."}]},s={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],r:0},i={cN:"meta",b:/#\s*[a-z]+\b/,e:/$/,k:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},c:[{b:/\\\n/,r:0},t.inherit(r,{cN:"meta-string"}),{cN:"meta-string",b:/<[^\n>]*>/,e:/$/,i:"\\n"},t.CLCM,t.CBCM]},a=t.IR+"\\s*\\(",c={keyword:"int float while private char catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and or not",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr",literal:"true false nullptr NULL"},n=[e,t.CLCM,t.CBCM,s,r];return{aliases:["c","cc","h","c++","h++","hpp"],k:c,i:"",c:n.concat([i,{b:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",e:""+">",k:c,c:["self",e]},{b:t.IR+"::",k:c},{v:[{b:/=/,e:/;/},{b:/\(/,e:/\)/},{bK:"new throw return else",e:/;/}],k:c,c:n.concat([{b:/\(/,e:/\)/,k:c,c:n.concat(["self"]),r:0}]),r:0},{cN:"function",b:"("+t.IR+"[\\*&\\s]+)+"+a,rB:!0,e:/[{;=]/,eE:!0,k:c,i:/[^\w\s\*&]/,c:[{b:a,rB:!0,c:[t.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:c,r:0,c:[t.CLCM,t.CBCM,r,s,e]},t.CLCM,t.CBCM,i]},{cN:"class",bK:"class struct",e:/[{;:]/,c:[{b:/,e:/>/,c:["self"]},t.TM]}]),exports:{preprocessor:i,strings:r,k:c}}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/\b-?[a-z\._]+\b/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,s,a,t]}});hljs.registerLanguage("shell",function(s){return{aliases:["console"],c:[{cN:"meta",b:"^\\s{0,3}[\\w\\d\\[\\]()@-]*[>%$#]",starts:{e:"$",sL:"bash"}}]}});hljs.registerLanguage("http",function(e){var t="HTTP/[0-9\\.]+";return{aliases:["https"],i:"\\S",c:[{b:"^"+t,e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{b:"^[A-Z]+ (.*?) "+t+"$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0},{b:t},{cN:"keyword",b:"[A-Z]+"}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{e:"$",r:0}},{b:"\\n\\n",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage("cs",function(e){var i={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long nameof object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let on orderby partial remove select set value var where yield",literal:"null false true"},t={cN:"string",b:'@"',e:'"',c:[{b:'""'}]},r=e.inherit(t,{i:/\n/}),a={cN:"subst",b:"{",e:"}",k:i},c=e.inherit(a,{i:/\n/}),n={cN:"string",b:/\$"/,e:'"',i:/\n/,c:[{b:"{{"},{b:"}}"},e.BE,c]},s={cN:"string",b:/\$@"/,e:'"',c:[{b:"{{"},{b:"}}"},{b:'""'},a]},o=e.inherit(s,{i:/\n/,c:[{b:"{{"},{b:"}}"},{b:'""'},c]});a.c=[s,n,t,e.ASM,e.QSM,e.CNM,e.CBCM],c.c=[o,n,r,e.ASM,e.QSM,e.CNM,e.inherit(e.CBCM,{i:/\n/})];var l={v:[s,n,t,e.ASM,e.QSM]},b=e.IR+"(<"+e.IR+"(\\s*,\\s*"+e.IR+")*>)?(\\[\\])?";return{aliases:["csharp"],k:i,i:/::/,c:[e.C("///","$",{rB:!0,c:[{cN:"doctag",v:[{b:"///",r:0},{b:"
コメント
>shin 様
この度は大変お手数ご迷惑をおかけ致しました。申し訳ございません。
ご指摘頂きましたとおり「トルクスドライバー T6」ネジがSSD・HDD サイド取り付け部に適用されております。
「T8」部分は早速修正させて頂きました。
以後注意を払って発信を行ってまいりますので、何かおかしな間違った箇所等御座いましたら、
ご指導ご鞭撻の程よろしくお願い致します。
ご報告有り難う御座いました。
こちらで紹介されている「トルクスドライバー T8」ですが、T8ではなくてT6ではないでしょうか?
ちゃんと確かめなかったのも悪いのですが、ここからリンクされているAmazonのページから購入したらサイズが合いませんでした。正しい情報に更新していただいた方がいいと思います。
>s 様
それはそれは、何よりです。
ご質問の外したメモリーですが、私の場合 HDD と一緒に保管しております。何かしら起こった場合の備えとしてと、人に譲る場合を考えて保管しております。
どうぞよろしくお願いいたします。
ご快諾ありがとうございました!
快適なPCライフに感激しています。
ちなみに、使い終わった(取り出したメモリ)はどのように扱っておりますか?
>s様
どうぞご自由に煮るなり焼くなりして下さい。このような稚拙なブログで大丈夫でしょうか。このブログをリンクしようなんて、さすがスラムにお一人で凸してしまう勇気をお持ちのs様ですね。
ありがとうございます。
こちらこそありがとうございました。
私、しがないブログを持っているのですが、こちらの記事をご紹介させていただいてもよろしいでしょうか?
>s 様
SSD 換装のご報告、有難うございます。そしておめでとうございます。
ご自身の作成したデータの量により、柔軟に移行出来た事は素晴らしいと思います。また真っ新にクリーンインストールされた事で、きれいにアンインストールされなかった、ファイルやログのお掃除も出来良かったのではないでしょうか。
そうですね。今後大切なデータを保存されていない方の参考になると思います。
生まれ変わった Macintosh は、まだまだ現役でいられると思いますので、大切に可愛がってあげて下さい。と言うか余計に愛着が湧いてしまいますよね。この度は貴重な SSD 換装方法のご報告までして頂き、有難うございました。
おかげさまでほぼ完璧に換装しました!
貴重な記事ありがとうございました。
せっかくご助言いただきましたが、この際と思い、タイムマシン使用せず真っ新なMacBookとして使いました。
設定、データ等々も殆どパソコン上に残していなかった為、データだけ軽くSDカードに寄せて引き継ぎました。
取り出したHDDですが、外付け可できるケースに付けたところ、Macintosh HDDとして普通に認識されたので、特にSDにデータを寄せる事も不要だったようです。
特に大切なデータの無い方は私と同じ方法で良さそうです。
>s 様
ご購読及び、コメント有難うございます。
意味を取り違えていたら申し訳御座いません。
TimeMachine でのバックアップを MAC 内蔵の HDD に取る事は出来ない様に思いますので、ご質問の “換装後に外付け化した HDD から TimeMachine で復活” させる事は不可能だと思われます。
Apple 公式ページ Time Machine で Mac をバックアップする
https://support.apple.com/ja-jp/HT201250
>外付けのストレージデバイスさえあれば、Time Machine でバックアップを作成できます。
またご質問とは異なり、尚且つ記事にはしていないのですが、外付け HDD を1台準備するのを省く(購入した SSD と 現在 MAC で使用中の内蔵 HDD のみ使用したい。)ために、MAC 内蔵の HDD に ” HDD イメージバックアップ” を取るタイプのバックアップソフトを利用しての SSD で展開する方式を試したことがあるのですが、これは上手く行きませんでした。
お話がそれてしまいましたが、以上の事から難しいかと思われます。もし意味を取り違えているようでしたらお手数ですが今一度ご質問下さい。これからもよろしくお願い致します。
貴重な記事ありがとうございます。
タイムマシンに付いてですが、HDDからSSDに取り替える前にHDDにバックアップして、電源落とす→SSD交換のタイミングで内臓HDDを外付けに変えるケースを買っておいて、換装後に外付け化したHDDからタイムマシンで復活させる事も技術的には可能でしょうか?