はじめに
Windows Subsystem for Linux、通称WSLなどと呼ばれ、Linuxを気軽に扱いたいときに非常に便利なシステムです。
その反面、システムの内部構造を理解して使用しないと大事故に繋がりかねず、最悪の場合Windows諸共お釈迦になる可能性が潜在しています。
今回は、私と同じようなWSL初心者に向けてのアドバイスも兼ねて、「過去に私が犯した大きなやらかし」について、自戒の意を込めて筆をしたためようと思います。
この記事の主な対象者
- これからWSLを触ろうとしている方
- WSLを触ってまだ日が浅い初心者の方
- 好奇心旺盛で、よくOSなどを破壊しかけている方
自己 (事故) 紹介
Qiitaに記事を上げることから初めてなので、軽く状況解説も兼ねて自己紹介から。
筆者紹介
瀬長白狐と申します。
南の島で高専生をやっているしがない情報系の人間です。
とはいっても専門的な知識はほとんどなく、ロボコンで使う制御技術と、趣味と好奇心で触った技術が少々ある程度。
よわよわ技術者見習いですが、この記事をきっかけにどこかの誰かのPCを救えればと思います。
浅はかな知識で記事を書くので、そうはならんやろって感じの発言をしたり、かなり嘘をついたりしてるかもしれません。悪しからず。
状況解説
今回の案件は、OSの授業において「実際にLinuxを触ってみよう」というテーマのもと、WSL2を使用することから始まります。
私自身LinuxはLinux Mintを入れた実機を少しだけ触った事がある程度で、あの辺りに関する知識はほぼ皆無に等しい状況です。
本題
授業中にWSL2を触っただけで飽きなかった私は、知的好奇心ってやつから色々遊び始めました。
そして、非常に良くない思い付きをするわけです
「WSLって仮想環境みたいなものだし、Linux禁断の破壊コマンド打ってもWSL入れ直すだけで良いんじゃね?」
今考えてみると発想があまりに浅はか過ぎました。
Linux禁断の破壊コマンド
Linuxを触った事がある人ならご存知かもしれませんが、Linuxには 「禁断の破壊コマンド」 と呼ばれるものが存在します。
それがこちら。
$ sudo rm -rf /*
知らない方のために何をしているか解説しますと、
「ルートディレクトリの下にぶら下がってる階層構造を全て諸共吹き飛ばすよ」
って感じです。
WSLってWindows上でLinuxが動いてる、つまり仮想環境じゃね?と考えた私は、危険な好奇心を原動力に脳死でコマンドを打ちました。
Windowsから切り離された仮想環境上なら、たとえ壊れたとしても、また入れ直せばいい。そう思っていた時代が私にもありました。
WSLの特性
一般的な仮想環境では主にハイパーバイザーの上にOSが乗っかってて、それぞれが独立して動くような形態をとっているのがほとんどだと思います。
実際、WSL2ではHyper-V上に完全なLinuxカーネルが乗っており、ほぼ独立したLinuxを使用することができるわけです。
これだけ見ると問題はなさそうな気もしますが、WSLはほぼ独立した環境なのです。
WSLはWindows Subsystem for Linuxです。直訳するとLinux 用 Windows サブシステムです。あくまでWindows主体のサブシステムに過ぎないのです。
22/11/07追記:WSLはサブシステム、WSL2は仮想マシン(※ただし、Windowsのドライブが/mnt直下にデフォルトでマウントしてあるもの)と考えた方が良いようです。(コメントでのご指摘ありがとうございました。)
LinuxのユーザーモードとWin32のユーザーモードは相互的にリンクしており、「Windows上のファイルにアクセスしてLinuxの環境から動かすことができるよ」 ってのがWSLの売りなわけです。
(詳しくはこちらの記事を参照:WSLとwindows間のファイル連携)
具体例で言うと、WSLのディレクトリ上に存在する/mnt/c
から、実質的にCドライブにアクセスできる感じです。
では話を戻してみましょう。
"Linux禁断の破壊コマンド"は、ルートディレクトリの下にぶら下がってる階層構造を全て吹き飛ばすのです。mntディレクトリも例外なく全て諸共です。
破壊、そして終焉ー。
ディレクトリが繋がっていることを認識していなかった私は、何の躊躇いもなくは破壊コマンドを実行しました。
「WSL上はそこまでファイル量も無いはずだし、すぐ終わるだろ」と考え、恐ろしいほどに静かなコンソール画面を見ながら、コマンドの終了を待っていました。
10秒程経ち、ぽつぽつと出てくるCドライブ上の一部ファイルへのアクセス拒否メッセージ。何かがおかしい事に気付き始めたころには時すでに遅し。
慌てて強制終了を掛けましたが、その時には既にCドライブ直下10%まで魔の手が及んでいました。
趣味で作ったMIDIデータとかがかなりの数飛んじゃいましたとさ。あーあ。
まとめ
ただのやらかし報告みたいになってしまいましたが、言いたいことがおおよそ伝われば良いかなって感じです。
軽く要約すると以下のような感じです
- WSLはWindowsとかなり密にリンクしてる
- Linux破壊コマンドは実機環境で安易に打ってはいけない
- 好奇心は猫を殺す(戒め)
「別に環境壊しても良いよ」って人は、一度試して挙動観察する価値ぐらいはあるんじゃないかと思います。
ということで、皆様も良いWSLライフを!
※破壊されたデータの半分ぐらいはTestDiskを使って救出されました。
詳細は以下の記事からどうぞ。
22/11/07 追記
皆様、コメントでの多くのご指摘ありがとうございます。
間違った知識を流布しないように、また、私自身の勉強にもなりますので非常に感謝しております。
それにしても本当に無知で申し訳ないです……もっとちゃんと勉強します……
24/11/19 追記
2年越しにようやくTestDiskによるデータ復元の話を書きました。
本当に今更ながら。大変お待たせいたしました。