pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


VMwareのスナップショットのディスク使用量を減らしたい

仮想マシンのディスクファイルを可変に設定しているとディスクの使用状況に応じて容量が増加しますが、不要になったファイルを削除しても仮想ディスクファイル自体が小さくなるわけではありません。例外的に仮想ディスクファイルが小さくなるのは次のケースです。

  • 仮想マシンのOSにWindowsを使用している
  • 仮想ディスクファイルにゼロフィルされた未使用領域(0x00だけが書き込まれた連続領域)がある
  • 仮想マシンがシャットダウンされている

Windows仮想マシンでスナップショットのディスク使用量を減らす

Windows仮想マシンではVMwareの管理画面から「仮想マシンのクリーンアップ」で仮想ディスクファイルを小さくできます。これは仮想マシンのスナップショットにも適用できるため、明示的なゼロフィルが実施されていれば肥大化したスナップショットを切り詰める目的にも利用できます。

ゼロフィルのツールは様々なものがありますが、マイクロソフトのwebサイトからダウンロードできる sdelete というツールがよいと思います。

docs.microsoft.com

sdeleteの使用例を調べるとHDD破棄を目的としたゼロフィルでの用例が多いようですが、今回は仮想マシンのディスクイメージの切り詰めが目的ですので、次のように1回だけゼロフィルすればOKです。

sdelete.exe -p 1 -z C:

その他のOSでスナップショットのディスク使用量を減らせるか?

これは減らす方法はないようです。

例えばゲストOSがLinuxの場合につぎのように操作してゼロフィルしても、VMwareLinux仮想マシンでのゼロフィルによるクリーンアップをサポートしていないため、スナップショットの使用量を減らすことができません。

dd if=/dev/zero of=testfile status=progress bs=1M
rm testfile

スナップショットがない仮想マシンなら次のようにvmware-toolbox-cmdを実行しての切り詰めがサポートされています。

sudo vmware-toolbox-cmd disk list
sudo vmware-toolbox-cmd disk shrink /

Windows10の作業環境にセットアップするアプリケーションのメモ

Windows10 20H2のリリースに伴って、作業用の仮想マシンを作り直したので、そのときの作業手順のメモを残しておきます。

仮想マシンの基本的な設定

  • CPU 2 Core
  • Memory 4GB
  • HDD 100GB
  • 仮想マシン内でのハイパーバイザーを有効化(WSL2利用のため)

真っ先に入れるもの

Linuxシェル環境を使いたいので、WSL2を真っ先にインストールする。また、各種アプリケーションのインストールをコマンドで実施したいのでChololateyもインストールする

Windows Terminal

https://www.microsoft.com/ja-jp/p/windows-terminal/9n0dx20hk701#activetab=pivot:overviewtab

WSL

https://docs.microsoft.com/ja-jp/windows/wsl/install-win10

Ubuntu20.04LTS

https://www.microsoft.com/ja-jp/p/ubuntu-2004-lts/9n6svws3rx71

Chocolatey

https://chocolatey.org/install

Chocolateyでインストールするアプリ

Visual Studio Code, Keepass, AWS CLIなどをインストールします。ただしコマンドプロンプトPowerShellを管理者権限のままでずーっと使うのは嫌なので、真っ先にsudoを入れておきます。

choco install sudo sudo choco install vscode sudo choco install keepass sudo choco install awscli

クラウドストレージ関連

Google Drive Backup and Sync / Drive File Stream

Google個人アカウント or Google Workspace アカウント(以前はG Suite や Googel Appsと呼ばれていました)で使えるものが違うので、必要に応じてインストールする。

choco install googledrive choco install google-drive-file-stream https://www.google.com/intl/ja_ALL/drive/download/backup-and-sync/ https://workspace.google.com/products/drive/

MacBookのバッテリー残量が3%台になったらシャットダウンするスクリプト

MacBook Pro 2012 Mid のバッテリーが消耗していて、タッチパッドに干渉するくらいに膨張してきたので、バッテリー交換することにしました。バッテリーは純正品がAppleでも修理手配可能ですが、せいぜい2年くらいしか使わないだろうと考えましたので、今回は互換品を選んでみました。

互換品の購入先はいろいろ考えた挙句、秋葉館にすることにしました。Amazonでもいろいろな互換品が販売されていますが、適切な製品を見極めるのは厳しいです。だったら秋葉館のようなショップから買う方が良いという判断です。

さて、実際に購入したバッテリーの説明書をみると、次の注意書きがありました。

  • 最初に使用する際は、バッテリー残量を3%になるまで放電し、その後安全に充電してください。

MacBookのバッテリーは純正品ではこのようなイニシャライズは不要のはずですが、互換品の場合はこういう操作が推奨されるのでしょうか。ちょっと判断がつかないのですが、とりあえず製造元の説明書に沿ってイニシャライズしてみることにします。

さて、実際にバッテリーを交換して起動してみたら残量は53%くらいでした。これを3%まで放電するなら省エネルギーの設定を変えてスリープしないようにしてから適当な負荷をかけて放置すれば良いのですが、そうとは言ってもMacBook Pro 2012 Midのバッテリー駆動時間は満充電時でカタログスペック上は最大7時間なので、約50%のバッテリーは最大で4時間かけないと放電できません。実際の駆動時間は負荷の掛け具合により、もっと小さくなるはずですが、バッテリー残量をこまめに確認するのは面倒です。

そこでバッテリー残量が4%を切ったら自動でシャットダウンするスクリプトを書いてみることにしました。

実装内容と実行方法

こういうスクリプトを shutdown_discharge.sh として作成します。

#!/bin/bash

# show the remaining battery percentage

while : ;
do
  cap=`ioreg -l | grep Capacity`
  full=`echo $cap | sed -e "s/^.*MaxCapacity\" = \([0-9]*\).*/\1/"`
  curr=`echo $cap | sed -e "s/^.*CurrentCapacity\" = \([0-9]*\).*/\1/"`
  pct=`echo "scale=3; $curr / $full * 100" | bc`
  pctint=`echo "100 * $curr / $full" | bc`
  printf "%.1f%%\n" $pct

  if [ $pctint -le 3 ]; then
    shutdown -h now
  fi

  sleep 1
done

このスクリプトの中で利用している shutdown コマンドの実行には管理者権限が必要ですから、次のように sudo 経由で実行する必要があります。これでバッテリーが3%台以下になったらシャットダウンされます。

sudo ./shutdown_discharge.sh 

今回の実装は下記ページのソースコードを一部修正しただけです。バッテリーの状態は ioreg コマンドで取得できますが、これを使うスクリプトの実装はいろんな方が行っていますからゼロから書くのではなく、ありものを参考にしました。

kenpg.bitbucket.io

リモートワーク用に椅子を買い換える

2020年3月からリモートワークを半年以上続けているのですが、これまで使っていた椅子だと座り心地が悪く、腰が痛くなるので買い換えることにしました。

購入時の選択ポイント

概ね、こういう要件で探しました。

  • 背もたれは、それなりの高さがほしい
  • ヘッドレストやランバーサポートも欲しい

過去の勤務先では、イトーキレビーノチェア エクストラハイバックを個人的に購入して使っていたことがありますが、これはかなり快適でした。しかしこれはすでに廃盤で中古しか入手できないので選択肢からは除外。

いまどきだと、ゲーミングチェアは長時間座るという要件には合っていると思うけれど、色味がわりときつめなので、どうかなあと思っていたのですが、イトーキのX FOCUS CHAIRというチェアが、ゲーミングチェアだけど色味がキツくないので、これを買うことにしました。

購入先は2020年のプライムデーでお安くなっていたので、Amazonで買うことにしました。

モノが届いたらレビュー書いてみようと思います。

MacBookのHDDを別のMacBookに付け替えてみる

MacBook 2009 Early をOS X 10.11 El Capitanリカバリーしようと試みたところ、macOSの再インストール中に「"Essentials.pkg"からファイルを抽出中にエラーが起きました。」が発生し、リカバリーできない現象が発生しました。

このエラーが発生した場合の定番の修復方法は、純正のメモリに戻す、という方法らしいのですが、生憎、純正のメモリはすでに手元にありません。また、今回のMacBook 2009 Earlyはメモリスロットの片方でエラーが発生するためにメモリを1枚だけ挿した状態で運用しています。このため、仮に純正メモリが手元にあったとしても、この問題を解消できない可能性が残ります。しかし目的はMacOS の再インストールをしたいだけなので、その目的が達せられるなら手段は問いません。

そこで、代替の解決方法として「別のMacBookOS X 10.11 El CapitanをインストールしたHDDを作成し、それをMacBook 2009 Earlyに装着する」という方法を取ることにしました。

このような方法を試行した事例はWeb上の記事ではあまり見かけないので、試行したときのログを残しておきます。

使用した機材の一覧

サンワサプライのドライバーセットは、トルクスのピットを含めていろいろ付属しているので、割と重宝しています。

作業手順

列挙すると次の通りです。あまり特殊な手順はありませんが、MacBookの2.5inch HDDにはトルクスねじが使われているので、トルクスドライバーは必須です。

  1. USBメモリに 10.11 El Capitanインストーラをセットアップする
  2. MacBook 2009 Early のHDDを外して MacBook Pro 2012 Mid に装着する
  3. USBメモリからインストーラを起動し、HDDのフォーマットとOSの再インストールを実施する
  4. インストールが完了したHDDをMacBook 2009 Earlyに戻す

macOSインストーラの入手方法はこちらにまとめていますが、実際に今回のような作業でインストールしたいバージョンのインストーラを入手します。 pslabo.hatenablog.com

ちなみに、この方法で10.15 CatalinaをインストールしたHDDを作成しても、MacBook 2009 Earlyはサポートされていないので利用できません。

USBメモリインストーラを作成する方法はこちらの通り。ここに出ていないバージョンでも類似の方法でメディアにインストーラを作成できます。 support.apple.com

そもそも、ターゲットディスクモードでOSをインストールできないのか?

Macをターゲットディスクモードにすると、FireWireやThunderboldケーブルで他のMacから外付けストレージとして操作できますし、今回使用した2台のMacBookFireWireポートを備えています。しかし手元にFireWireケーブルがないので今回は試していません。

support.apple.com

MacOSの入手方法のリスト

手元のMacBookを初期化するにあたり、入手可能なOSバージョンと入手方法をまとめてみました。手元のMacBookで最も古いモデルはMacBook 2009 Earlyなので、このモデルにインストール可能な最も古いバージョンから始まって、現在入手可能な最新リリース(2020年10月1日時点では 10.15 Catalina)までをまとめています。10.16 Big Sur についてはリリースされ次第追加します。

MacOS バージョン 入手方法
OS X 10.5 Leopard 配布終了
OS X 10.6 Snow Leopard 販売終了
OS X 10.7 Lion 販売中 https://www.apple.com/jp/shop/product/D6106Z/A/os-x-lion
OS X 10.8 Mountain Lion 販売中 https://www.apple.com/jp/shop/product/D6377J/A/os-x-mountain-lion
OS X 10.9 Mavericks (入手方法不明)
OS X 10.10 Yosemite ダウンロード可能 https://support.apple.com/ja-jp/HT210717
OS X 10.11 El Capitan ダウンロード可能|https://support.apple.com/ja-jp/HT206886
macOS 10.12 Sierra ダウンロード可能 https://support.apple.com/ja-jp/HT208202
10.13 High Sierra ダウンロード可能 https://support.apple.com/ja-jp/HT208969
10.14 Mojave ダウンロード可能 https://support.apple.com/ja-jp/HT210190
10.15 Catalina ダウンロード可能 https://support.apple.com/ja-jp/HT201475

理由はよくわからないのですが、10.9 Mavericks だけ入手方法が不明です。

MacBookの初期化方法に関するメモ

古いMacBookを初期化しようとしたところ、方法がいろいろあったのでメモしておく。

基本的なやりかた

次のいずれかのキーの組み合わせを押しながら電源を入れると、OSの再インストールが行えます。

押すキー 動作
command (⌘) + R MacBookにインストールしていたmacOSのバージョンで初期化
option + ⌘ + R 最新のmacOSで初期化
shift + option + ⌘ + R そのMacBookにプレインストールされていたmacOS(またはそれに近い入手可能なバージョン)で初期化

再インストールの際はインターネット側との通信が発生しますし、方法によってはインストールイメージをインターネットからダウンロードしますのでブロードバンド回線が必要です。

OSを初期化するまえに次の操作を行っておきます。 https://support.apple.com/ja-jp/HT201065

iCloudからのサインアウトを行わずに初期化してしまった場合はNVRAM/PRAMをリセットすれば「Macを探す」の機能が無効にできる、らしい(未確認)。 Option + Command + P + R を押しながら電源を長押しし、2回目の起動音が鳴ったらキーを離す。 https://support.apple.com/ja-jp/HT204063

インストールメディアを作ってリカバリーする

基本的な方法がうまく行えない場合に、macOSインストーラをダウンロードしてインストールメディアを作成し、そこからリカバリーする方法もあります。この方法ではインストーラのダウンロードを除いてインターネット側との通信は不要です。オンラインリカバリが失敗する場合はこちらの方法を試します。

ただしこの方法でインストールメディアを作成するにはmacOSが動作する環境が必要です。

インストーラの作成方法はこちらにあるように、インストーラをダウンロードしてからターミナルでコマンドを実行します。

https://support.apple.com/ja-jp/HT201372

作成したインストールメディアをリカバリーしたいMacBookに装着して起動すれば、macOSの再インストールが行えます。起動するにはoptionボタンを押しながら電源を入れますと起動デバイスの選択画面が表示されます。