Bash on Ubuntu on WindowsのrmはACLを無視して削除できるのか
はじめに
つい昨日,こんな記事を見かけました.
なんと,Bash on Ubuntu on Windowsで sudo rm -rf --no-preserve-root /
を実行すると, /mnt
にWindows上の C:\
がマウントされているために,Windowsが起動不可能になってしまうようです.
ここで疑問に思いました.
最近のWindowsでは,重要なシステムファイルは,Administrators権限ですら削除できないようにACL(アクセス制御リスト)でガッチガチに保護されているのでは?
ということ.
はたして,Bash on Ubuntu on Windowsでは,ACLに打ち勝ってシステムに保護されたファイルを削除できるのか,試してみることにしました.
まずはWindows側から検証
まず初めに,Windows側でいろいろ試してみたいと思います.
といっても,使っているWindowsをぶっ壊されては堪らないので,Cドライブ直下にあるWindows.old
の残骸を使います.
このWindows.old
フォルダですが,Windowsのアップグレード時に,前のバージョンやビルドに戻すためのデータを一時的に保管するために自動生成されるフォルダで,不要になればディスククリーンアップツールを使用して削除することができます.
ところが,稀にSYSTEM権限でしか触れないシステムファイルが入ってしまい,通常のWindowsからは削除できずに残ってしまうことがあります.
エクスプローラ
まず,普通にエクスプローラから
はい.普通に怒られました.
コマンドプロンプト
次に,コマンドプロンプト(管理者権限)から rmdir /S .\Windows.old
でいってみます.
無理ですね.
PowerShell
ならば,われらがPowerShell(管理者権限)で Remove-Item -Path .\Windows.old -Recurse -Force
を実行.
こちらも盛大に怒られました.
本丸のBash on Ubuntu on Windowsで検証
では,本丸のBash on Ubuntu on Windowsでやってみたいと思います.
と思ったら,Bash on Ubuntu on Windowsを入れ忘れていた...
入れましょう
さて,気を取り直してbashで sudo rm -rf ./Windows.old/
を実行します.
怒られました.よかった...
まとめ
Bash on Ubuntu on Windowsも,ちゃんとWindows側のACLに従って(あたりまえだけど)消せないものは消せないようになっています.
でも,/mnt
に全ドライブマウントされているので,迂闊に sudo rm -rf --no-preserve-root /
なんてやっちゃだめですよ!
Windows 10による S.M.A.R.T.情報確認用ブータブルUSBの作成方法
はじめに
HDDやSSDなどでディスク障害が疑われる場合,まず確認するのは,ディスク自体が持つ自己診断機能「S.M.A.R.T.」の情報ですね.Windowsにおいて,S.M.A.R.T.情報を確認する上で強力なツールとして,ひよひよ氏が公開している「CrystalDiskInfo」があります. 「CrystalDiskInfo」は非常に多くのディスクに対応し,Windows ServerのServerCoreインストールであっても動作しますが,OSがブートできなくては使用することができません.そこで,Windows オペレーティング システムのインストール、展開、修復に使われる,RAM上で動作する軽量Windowsの「Windows PE」を用いて,CrystalDiskInfoを起動するだけのブータブルUSBを作成してみたいと思います.
なお,Windows PEの構成に必須の「Windows ADK for Windows 10 Version 1511」はインストールが完了しているものとします.
1. [展開およびイメージング ツール環境]の起動
スタートメニューから,[展開およびイメージング ツール環境] を右クリックし、[管理者として実行] 管理者として実行します.
2. Windows PE ファイルのコピー
作業用のフォルダ(E:\)にWindows PEのファイルをcopypeコマンドを用いてコピーします.
32bit用のWindows PEの場合は
copype x86 "E:\WinPE_x86"
を実行
64bit用のWindows PEの場合は
copype amd64 "E:\WinPE_x64"
を実行(以降は64bit用で説明)
3. イメージのマウント
Windows PEのイメージファイル(boot.wim)を作業用のフォルダにマウントします.
dism /Mount-Image /ImageFile:"E:\WinPE_x64\media\sources\boot.wim" /Index:1 /MountDir:"E:\WinPE_x64\mount"
4. パッケージの追加
「WinPE-WMI」パッケージを追加します.
dism /Image:"E:\WinPE_x64\mount" /add-package /packagepath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\WinPE-WMI.cab"
dism /Image:"E:\WinPE_x64\mount" /add-package /packagepath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\ja-jp\WinPE-WMI_ja-jp.cab"
5. 日本語パッケージの追加と適用
5.1 インストールされている言語の確認
dism /Image:"E:\WinPE_x64\mount" /Get-Intl
en-USがインストールされているようです.
5.2 日本語ローカライズパッケージの追加
次のコマンドを実行します.
dism /Image:"E:\WinPE_x64\mount" /add-package /packagepath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\WinPE-FontSupport-JA-JP.cab"
dism /Image:"E:\WinPE_x64\mount" /add-package /packagepath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\ja-jp\lp.cab"
5.3 Windows PEの日本語化
続けて,次のコマンドにより,Windows PEの日本語化を行います.
- UI 言語,システムロケール,ユーザーロケール,入力ロケールを設定
dism /Image:"E:\WinPE_x64\mount" /Set-AllIntl:ja-JP
- 入力ロケールを設定
dism /Image:"E:\WinPE_x64\mount" /set-InputLocale:0411:00000411
- タイムゾーンを設定
dism /Image:"E:\WinPE_x64\mount" /Set-TimeZone:"Tokyo Standard Time"
- キーボードドライバの設定
dism /Image:"E:\WinPE_x64\mount" /Set-LayeredDriver:6
- セットアップで使われる既定の言語を設定
dism /Image:"E:\WinPE_x64\mount" /Gen-LangINI /distribution:"E:\WinPE_x64\media"
dism /Image:"E:\WinPE_x64\mount" /Set-SetupUILang:ja-JP /distribution:"E:\WinPE_x64\media"
5.4 インストールされている言語の確認
dism /Image:"E:\WinPE_x64\mount" /Get-Intl
日本語(ja-JP)になりましたね.
6. CrystalDiskInfoのイメージへの追加
hiyohiyo氏のページ(http://crystalmark.info/download/)より,CrystalDiskInfoのポータブル版(zip)をダウンロードします.
なお,通常版とShizuku Editionのどちらを用いても構いません.(以降はShizuku Editionで説明する)
ダウンロードしたzipファイルを展開し,「CrystalDiskInfoX_X_XShizuku」フォルダを「CrystalDiskInfo」にリネームして「E:\WinPE_x64\mount\Program Files\」以下にコピーします.
7. スタートアップスクリプトの修正
Windows PE起動時にCrystalDiskInfoを自動起動するようにスタートアップスクリプトを修正します. 「E:\WinPE_x64\mount\Windows\System32\startnet.cmd」を以下の内容に変更します.
wpeinit @echo off "x:\Program Files\CrystalDiskInfo\DiskInfoSx64.exe" echo WindowsPEをシャットダウンするには「wpeutil shutdown」を使用してください。 @echo on
※64bitのWindows PEでは,64bitネイティブのアプリケーションしか動作しません.
8. イメージのコミットとアンマウント
今までの作業用のフォルダの変更箇所をイメージファイル(boot.wim)にコミットして,アンマウントします.
dism /Unmount-Image /mountdir:"E:\WinPE_x64\mount" /commit
9. ISOイメージの作成
Makewinpemediaコマンドを用いて,ISOイメージファイルを生成します.
Makewinpemedia /iso "E:\WinPE_x64" "E:\WinPE_CDI_x64.iso"
※直接USBフラッシュメモリに書き込むには,次のコマンドラインを実行します.
Makewinpemedia /ufd "E:\WinPE_x64" F:
(「F:」はUSBフラッシュメモリのドライブ文字とする)
その他
デバイスドライバが必要な場合は,イメージ編集中に
dism /Image:"E:\WinPE_x64\mount" /Add-Driver /Driver:[infファイルのあるフォルダ]
とすることで,デバイスドライバを含めることができます.詳しくは次の参考ページを参照してください.
Windows 8.1 Updateに対応したカスタマイズしたWindows PE 5.1を用意する(その2)
https://infra20th.wordpress.com/2014/07/10/windows-8-1-update%E3%81%AB%E5%AF%BE%E5%BF%9C%E3%81%97%E3%81%9F%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%E3%81%97%E3%81%9Fwindows-pe-5-1%E3%82%92%E7%94%A8%E6%84%8F%E3%81%99%E3%82%8B-2/MSDN - オフラインの Windows PE イメージにデバイス ドライバーを追加する
https://technet.microsoft.com/ja-jp/library/dd799289(v=ws.10).aspx
参考ページ
MSDN - DISM イメージ管理のコマンドラインオプション
https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn898549.aspxMSDN - DISM の地域と言語サービスのコマンドラインオプション
https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn898550.aspxMSDN - Makewinpemediaのコマンドラインオプション
https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn898587.aspx@IT - 管理者必携のトラブルシューティングツール「Windows PE 5.0」の起動用USBメモリを作成する (2/2)
http://www.atmarkit.co.jp/ait/articles/1402/13/news133_2.html量産メモ帳 - Windows 10 で Windows PE のディスクイメージを作成する。
http://rms-099.hatenablog.jp/entry/2015/10/06/000000
Windows10のAnniversary Updateを一時的に阻止する
来る8月2日,ついに我々Insidersが待ちに待ったAnniversary Update (Version1607)が降ってきますね.
(8/3追記)Current Branchに降ってきましたね.
Windows 10はWindows as a Service(WaaS)というコンセプトに基づき,定期的に最新のWindowsが使用できるようになります.大変ありがたいものです.
ところが,某幣学では,某Symantec Endpoint Protection(SEP)の影響で,Version1607が適用できないという大問題が発生しそうです.(Insider Preview Build 14385適用時に確認)
こればかりはどうすることもできないので,諦めてコンシューマー向けの最新ビルドが適用されるCB(Current Branch)から,4か月間の猶予があるビジネスユーザー向けのCBB(Current Branch for Business)に切り替えておくこととしましょう.同様に,「8月2日に新ビルドが降って来たら困る!」なんて人もCBBに切り替えておくといいかもしれませんね.
(11/7追記)
弊学にも(いつの間にか)対応するSEPが配布されていました.
Version 12.1.6 (12.1 EU6 MP5) 以降のバージョンより,正式対応しています.
ここからは,現状CB(Current Branch)における最新ビルドであるVersion1511 (Build10580)を例に説明します.
設定アプリを開く
「Windowsキー」+「I」もしくは,スタートメニューから設定アプリを起動します.
CBBへの切り替えオプションを表示させる
設定アプリの「更新とセキュリティ」を選択します.
「Windows Update」タブの一番下にある「詳細オプション」を選択します.
CBBに切り替える
表示された画面にある「アップグレードを延期する」にチェックを入れます.
以上です.これですぐにはVersion1607は適用されないはずです.
なお,恒久的にアップグレードを阻止するにはWSUS(Windows Server Update Services)により制御する,もしくはEnterpriseエディションのLTSB(Long Term Servicing Branch)を使用する必要があるとのことです.