この記事の概要を簡単まとめ!
- Google Chromeが妙にCドライブにアクセスする現象を確認
- よく発生したのがYouTubeへ動画をアップロードするとき
- 空いているRAMをディスク化すれば理論上SSDは長持ちするはず
- フリーソフトでRAMをディスク化し、起動オプションでそこを指定する
- コマンド起動に対応しないならシンボリックリンクで対応する
- SSDは傷つきやすい、だからRAMが肩代わりだ
配信ルーチンは、TwitchでやってYouTubeに録画をアップロードする形だ。終わる時間帯が最長で3時にもなる関係で、大抵その日の朝にYouTubeにアップロードしている。それ自体はNUROモバイルの回線をテザリングすれば楽勝なのだが、1つ気になることがあった。
YouTubeに録画をアップロードしようとすると、何故かCドライブに異常な書き込みが行われる。まるで録画データそのものをCドライブにコピーしているかのようである。あまりにも気持ち悪い現象で、これのせいでCドライブが毎回圧迫されていて嫌だった。そこで考え付いたのが、RAMディスクにChromeのキャッシュを置くことだ。実際にやってみることにした。
ひとっ飛びできる目次
キャッシュはRAMに肩代わりさせろ
Chromeの奇妙な現象
SSDとPCの関係
現在のPCは、デスクトップでもラップトップでもよほどのことがなければ、1つのディスクは十分な容量を持っているはずだ。また、デスクトップないしワークステーションクラスのラップトップの場合は2つ以上のディスクを接続することができる。これはSATA+mSATA SSDか、DVDドライブを抜き取ってslimline SATAを通常のSATAかmSATA SSDに変換して接続するパターンが多い。現在はPCでディスクROMを扱う機会が少なくなっていることを考えても合理的な改造パターンである。
さて、現在はSSDの価格は、NAND技術の向上と1セルあたりで扱えるビット数の向上(多くは3ビットとなるTLC)によってかなり下がっており、1TBでも1万円以内で入手できるようになっている。そのため多くの人がメインディスクとしてSSDを採用していることであろう。
だがSSDで注意したいのは、書き込みの寿命があるということ。最も流通していると思われるTLCを基準に考えると、一般的な書き換え耐久は3,000~5,000回であるとされる。ただしこの数字はあくまでも一般的な値に過ぎず、メーカーによっては耐久度を向上する対策を取り入れていることが多く、同時にどのSSDでもオーバープロビジョニング1)一般にSSDはメーカー記載の容量に対し、OSで認識できる容量が少なくなるよう設定されている。この時の容量差分を%で示した余剰率の一部がOP領域として使用される。また、残った部分は代替領域として使用される。が行われており、年中何かしら大量のデータを書き込みしまくっているのでもなければ、SSD寿命を迎えるということは殆どない。またユーザーによってはあえてOSが認識できる全容量を使用せず、未使用領域を用意して運用しているというのも珍しくない。
Cドライブが妙に圧迫される現象
私の場合は、愛用しているHP EliteBook 8570wはどういうわけか、バッテリー以外はまだ生きているのでそれを使い続けている。これはメインディスクにSATA、サブディスクにmSATA SSD、3番目としてDVDドライブを取り外してslimline SATAを変換することで追加可能な構造となっている。現在はSATAに256GB SSD、mSATAに128GBのSSDを搭載し、これとは別に外付けの1TB HDDに大容量データを保存する運用を行っている。この外付けHDDは、配信時に裏で録画をするときにも使用している。
実は配信後のYouTubeへのアップロードは、8570wから行っている。単にデータをアップロードする場合は、CPUやGPUの性能は問題ではないからだ。作業の合間にアップロードするという手法を取っており、この時にLANを無線化する装置を利用して、配信回線分離論で解説した設定をYouTube Studioに合わせた形にしてアップロードすることにより、Xperia 10 IV(NUROモバイルdocomo回線)の容量を無駄に消費することなく、いつも使っているクソフトバンクダメダー経由の通常通信を利用できるようになる。真の5Gのアップロード速度にはいつも助かっている。
だが回線が良くても、今度は8570wのSSDに問題が発生した。256GBのSSDは使用容量を削り、180GB程度になるよう調整して運用していた。インストールするソフトウェアが多くなったことでだいぶ空き容量は減っていて、しかし20GB前後は必ず空くようにしているので、運用上は問題ない。だがこれがYouTubeに動画をアップロードするときだけ、おかしいことが起きる。外付けHDDからアップロードする以上、8570wの各SSDはアップロードには全く関係がないはずである。にもかかわらず、ChromeでYouTubeへアップロードすると、Cドライブに謎の書き込みが発生してSSDに損傷を与えるのである。
この現象には前から悩まされていたものの、対処方法が分からないために放置していた。だがそれが良くなかった。謎の書き込みは自動で削除されることもなく、ゴミとして蓄積されてしまい、これが動作に悪影響を及ぼした。削除されないせいで空き容量は実際よりも少なくなり、OSはこれをそのまま認識してしまうので、その状態でさらにアップロードしようとすると容量によるボトルネックが発生し、アップロード速度が遅くなる現象を観測した。もしこれが本当であるなら、今後の活動に大きく支障が出ることになる。

対策:RAMディスクを利用する
対策に関して調べていると、使えそうなものが1つあった。それがRAMをキャッシュ領域として利用することである。つまり、RAMを一時的にChromeのキャッシュストレージにすることだ。要するにRAMディスクというものである。しかしRAMは基本的にユーザーがアクセスして使用することは不可能なものである。その場合は外部から特殊操作をすることによって実現するわけだが、現在は幸いにも難しいことはせずにフリーソフトを使えばRAMディスクを利用することができる。
RAMはROMと異なり、電源を切るとデータが消失する。したがってRAMディスクにキャッシュを割り当てた場合、電源を切るとそのキャッシュは消滅することになる。だがこれは、考えればプラスに働くものである。電源を切れば不要なキャッシュはすぐさま消えるので、これにより不要なデータが蓄積されなくなる。
また、SSDよりも頑丈に出来ている(とされる)RAMを利用するので、SSDへの書き込みを最小限に抑えることができ、キャッシュアクセスもSATA接続と比較して高速化できる。NVMe(PCIe)はそもそもアクセス速度が高速なのでそこまで差は発生しないが、SSDの寿命を延ばす意味では重要である。
したがって今回行うのはRAMディスクの実装と、それに伴う各種設定の方法である。なお、RAMディスクに関してはここでは簡単な説明のみを行い、RAMディスク自体の解説は別記事で行うものとする。
RAMディスク実装とキャッシュの切替
使用するソフトウェア
今回使用するのは、フリーソフトであり、最近にも更新が行われたImDisk Toolkitである。公式サイトはないが、SourceForgeが事実上の公式サイトの扱いとなる。32bit版と64bit版の両方が用意されているが、特別な理由がない限りOSは64bitのはずなので、ここでは64bit版を前提として話を進める。
インストール形式はバッチファイルを利用したもので、中身を任意の場所に解凍し、そのフォルダの中にあるものを実行するようになっている。とりあえずはインストールして、インストール後にスタートメニューから”RamDisk Configuration”を実行し、適当に設定した上でOKをクリックすれば早速RAMディスクが作成される。最低限設定することとしては、”Create TEMP Folder”はOFFにしておくべきであるということ。これはWindowsの環境変数を書き換えるものであるので、RAMディスクを終了した後で不具合を起こす可能性があり、推奨できない。そのためこれだけは必ず切っておく必要がある。

設定値は環境によるが、目安として最低人権値の8GBである場合は512MB~1GB、16GBなら2GB、32GB以上ならそれ以上の任意値となる。私は実装値24GBで余裕があるため、4GBをセットした。ただし使用状況によっては調整を適宜行うものとする。また、今回はChromeキャッシュに限定して話を進めているが、使用する予定があるなら他のものでもキャッシュや一時ファイルの展開場所に設定しても問題はない。ただし、エラー等が発生しても私は一切の責任を負いかねる。
デフォルト設定でドライブラベルはRamDisk, ドライブレターはRとなっている。この状態でOKをクリックすると下のステータスランプが緑で”Done.”となり、エクスプローラーから見るとRamDisk(R:)が追加されているはずだ。これで使用準備が整う。
Chrome実行時に命令を与える
大事なのは設定後にそれをChromeが使うように命令することである。その命令を与えるためにChromeのショートカットに加工を行う。一般にショートカットはインストールされている場所のリンク先と作業フォルダを同時に指定するようになっており、cmdのコマンドをGUI的に扱えるようになっていると考えることができる。これらの編集はプロパティから行える。
編集内容はリンク先で、これの末尾に--disk-cache-dir="R:\[dir_name]"
を追加して保存する。このときの[dir_name]
は任意の名前で問題ない。これにより、このコマンドが追加されたショートカットからChromeを起動すると、RAMディスク内の[dir_name]
に自動でフォルダが作成され、起動するとその中にDefault
フォルダが作成されて、さらにCache
とCode Cache
が作成されてキャッシュがそこに置かれるようになる。

Chromeのキャッシュは使えば使うほど書き込みが増えるので、キャッシュの位置をそのままにしていると相当な書き込み量になる。どうでもいいゴミでSSDの書き込み量を増やすのはユーザーにもSSDにも本望ではないはずで、こうすることでゴミを避けつつ、SATA SSD以上の高速アクセスによって動作自体の高速化も期待できるようになる。
なお、Chrome以外のブラウザでもキャッシュの変更は可能で、ここでは割愛するがFirefox, Microsoft EdgeでもRAMディスクに変更して使用することが可能である。SSDへの無駄なアクセスに困っているのなら、とりあえずやってみてもいいはずだ。
再起動やアンマウントするとどうなるか
検証すべきこととして、再起動やアンマウントを行うとどうなるかである。答えは非常に簡単で、そこに置いてあるデータは即時消失する。それも当然のことであり、RAMは揮発性メモリであるから、再起動することで一旦全てリセットされ、Chromeを停止後にキャッシュを全て削除したのと同じになる。これによりゴミをCドライブに溜めることなく運用できるようになる。
また、一度設定したRAMディスクは”RamDisk Configuration”から”Unmount”で取り外しを実行しない限り設定とRAMディスクの作成状態が維持される。当然のことながらアンマウントの実行でもRAMディスク内のデータは即時削除される。注意したいのは、そのRAMディスクがChromeをはじめとした任意のソフトウェアで、キャッシュやtempファイルの置き場として使用中にアンマウントを実行した場合、何らかのエラーが発生する可能性が高いことだ。
したがって、RAMディスクの調整または終了を行う場合は使用するキャッシュやtempファイルを別の場所に設定してから実行する必要がある。この設定を忘れてアンマウントしてしまうと動作に支障が出ることも確実なため、起動中に設定を変更するか、あるいはアンマウント後の設定変更完了時には再度有効にしておくことを忘れないようにすることだ。
スポンサーリンク
「アップロード」に対してはシンボリックリンクが必要
しかしこの方法では、私が対処したいことに対してはうまく機能しなかった。どうやらアップロードに関しては書き込まれる場所が異なり、この方法では対応できなかった。書き込み場所に関してリソースモニターを使い確認してみたところ、C:\Users\[username]\AppData\Local\Google\Chrome\User Data\Default\IndexedDB
に異常に書き込まれることが分かった。これではキャッシュとは扱われないため、SSDへの書き込みを避けることができない。
そこでシンボリックリンクを利用する。簡単に言えば少し特殊なショートカットだ。詳しい説明はここを参照してもらうとして、データの実体はRAMディスクに移し、元々あるIndexedDBに対しては、そこにアクセスした場合はRAMディスクの方に飛ばすように設定する。こうすることで融通の利かないChromeでも、RAMディスクを使ってくれるようになるということだ。そのためのcmdの呪文が以下である。
1 2 3 4 5 6 7 8 9 10 |
@echo off rem まずは専用のディレクトリを生成する mkdir "R:\chrome_upload_cache" rem シンボリックリンクを作成する。順番は作成したいシンボリックリンクのパス(=Cドライブ)、元のディレクトリ(RAMディスク)の順。 rem あらかじめ元のディレクトリは削除するか移動した上で実行しなければならない。 mklink "C:\Users\[username]\AppData\Local\Google\Chrome\User Data\Default\IndexedDB" "R:\chrome_upload_cache\IndexedDB" rem シンボリックリンクを削除したい場合は元のディレクトリのパスを指定する。この場合はRAMディスクのディレクトリ。 rmdir "R:\chrome_upload_cache\IndexedDB" rem clinkを導入している場合はunlinkでも解除できる。 unlink "R:\chrome_upload_cache\IndexedDB" |
こうすることにより、見かけ上Cドライブにアクセスしているように見えて実際はRAMディスクにアクセスするようになり、アップロード時に異様にSSDにアクセスすることもなくなるはずだ。また、Service Workerも同様にアクセスが多いようで、これに対しても同じ方法で設定すれば、問題なくRAMディスクに肩代わりさせることができる。またこれに合わせてRAMディスクを8GBに拡張した。
問題は再起動・シャットダウンするとデータが即時削除されることだが、IndexedDBもService Workerも一般ユーザーは全くと言っていい程使わない。したがってデータの心配はしなくてよく、寧ろRAMディスクへ移転・削除されることによってSSDへの無駄なデータの書き込みと蓄積を避けることができる。IndexedDBはオフラインでも色々できるものであるらしいが、そもそもインターネット環境がないと意味のないブラウザに必要とは到底思えないものである。
SSDは傷つきやすい、だからRAMが肩代わりだ
SSDの全体容量は技術向上によって1GB単位の価格が低くなり、3D NANDを用いて縦に積み上げることによってさらに容量が増し、1セルあたりのデータ格納数を上げたことで全体的に低価格とすることが実現できた。しかしその場合はSSD自体の寿命を縮めることになるので、一般流通量が最も多いであろうTLCは書き換え回数3,000~5,000、1セルあたりのデータ格納数が最も多い反面で書き換え回数も非常に少なくなるQLCで500~2,000という目安だ。
無論、物理的な動作は殆ど少ないとはいえ電子動作部品である以上、使う度に消耗していくことは避けられず、結局SSDも「消耗品」でしかない。ただ最近は耐久性を向上させるための努力を各企業が行っているので、通常使用であればSSDがいかれる前にPCの別の部品がいかれるということの方が多い。特に母板、CPU, GPUは壊れやすいので、逆にそれで壊れたとなる方が多いであろう。
とはいえSSDに寿命があることは変えられない事実であり、最近はデスクトップPCでデータ用SSDとしてM.2 QLCが選択されることもあるようだ。その時に不要なデータを異常に書き込まれるのはユーザーにもSSDにも本望ではない。そこで解決策として出したのがRAMディスク。余程ケチらなければRAMは16GB以上であることは普通で、ゲーム用に調整している人は32GB以上であることは当たり前のことになっている。
RAMを全て消費するような状況は滅多に起きず、ゲームをしていない状態なら持て余すことは多い。なので多めにRAMディスクとして利用しても、問題は起きない。まずRAMディスクの設定が必要だが、これは誰でもできるものになっている。そしてPCの上級者向けの知識があれば、書き込みが多いがゴミになるものをRAMディスクに置くことによって、SSDへの書き込み負荷を軽減し、再起動やシャットダウンで即時削除してくれる。SSDは傷つきやすいので、RAMが肩代わりしてやろう。
以上、Chromeキャッシュ移行設定書:SSDの長持ちのために、であった。持て余してしまうRAMはディスク化して全体の長寿命化をはかるのがいい。
KIBEKIN at 00:00 Jul. 16th, 2023
特別追記:拡張機能への影響
なお、後日調査結果だが、IndexedDBは拡張機能に作用していることが分かった。そのためこのデータを丸ごとRAMに置いてしまうと機能しなくなることが分かったため、以下のように改定した。
1 2 3 4 |
@echo off rem シンボリックリンクの対象をhttps_studio.youtube.comに限定する。該当フォルダはあらかじめ削除すること。 mklink /d "C:\Users\user\AppData\Local\Google\Chrome\User Data\Default\IndexedDB\https_studio.youtube.com_0.indexeddb.blob" "R:\chrome_upload_cache\IndexedDB\https_studio.youtube.com_0.indexeddb.blob" mklink /d "C:\Users\user\AppData\Local\Google\Chrome\User Data\Default\IndexedDB\https_studio.youtube.com_0.indexeddb.leveldb" "R:\chrome_upload_cache\IndexedDB\https_studio.youtube.com_0.indexeddb.leveldb" |
YouTubeへのアップロード時に書き込まれる場所はその場所であることは明らかになっているので、この2つに対して指定すれば書き込みを抑えつつ、他の拡張機能への影響が無くなる。そのため拡張機能を利用している人は、この方法で個別対処を行った方が安全になる。また、実施前に上記2つ以外はバックアップしてから試すのも必要なことになるであろう。
追記情報
2023年7月16日 IndexedDBは拡張機能の一部に使われていたことが判明したので、YouTubeのアップデートだけを対象にシンボリックリンクを設定する方法に変更した
スポンサーリンク
脚注
本文へ1 | 一般にSSDはメーカー記載の容量に対し、OSで認識できる容量が少なくなるよう設定されている。この時の容量差分を%で示した余剰率の一部がOP領域として使用される。また、残った部分は代替領域として使用される。 |
---|