start

HFS+の透過圧縮でディスク容量を節約してみる

Mac Proのストレージを、1TBのHDDから240GB(120GBx2のRAID-0)のSSDに替えたところ、容量カツカツでわろえない。残容量の不安も然る事ながら、ウェアレベリングの観点からも、空きが少ないのはハード的にも精神的にもよろしくない。

溜まりに溜まったゴミデータの整理や、塩漬けデータをNASに移したりして容量確保に勉めたが、自ずと限界はある。「こんな時ZFSなら透過圧縮で容量稼げるのにな…」と愚痴を言ってみたところで、Snow Leopard以降HFS+にも透過圧縮が付いた事を思い出した。

善は急げと、試しに/Developerを圧縮してみた。

$ cd /
$ sudo ditto --hfsCompression Developer DeveloperC
$ afsctool -v /DeveloperC
/DeveloperC:
Number of HFS+ compressed files: 155245
Total number of files: 181386
Total number of folders: 30417
Total number of items (number of files + number of folders): 211803
Folder size (uncompressed; reported size by Mac OS 10.6+ Finder): 5566353923 bytes / 5.98 GB (gigabytes) / 5.57 GiB (gibibytes)
Folder size (compressed - decmpfs xattr; reported size by Mac OS 10.0-10.5 Finder): 2354926231 bytes / 2.53 GB (gigabytes) / 2.35 GiB (gibibytes)
Folder size (compressed): 2551670089 bytes / 2.72 GB (gigabytes) / 2.54 GiB (gibibytes)
Compression savings: 54.2%
Approximate total folder size (files + file overhead + folder overhead): 2822868266 bytes / 2.82 GB (gigabytes) / 2.63 GiB (gibibytes)

5.57GiBが2.54GiBへ・・・これは素晴らしい!同様にXcode 4は3.43GiB→1.78GiB、ドキュメント(~/Library/Developer/Shared/Documentation)は5.02GiB→2.69GiBを達成。

仮想マシンのイメージを圧縮したら激ウマじゃね!!??と思い、14.21GiBの.vmwarevmを圧縮してみたら13.18GiBにしかならんかった(´・ω・`)

注意点は、圧縮以後に追加されたファイルには自動で圧縮が掛からない(その都度手動で圧縮しないといけない)のと、manを見ると一応「システムファイルのインストールやバックアップ用途のみを想定」となっている事。リアルタイムで圧縮が掛からないのは、そういう前提があるからなのかな?まぁ、殆ど変化することのないアプリの圧縮には十分っすね。どうしてもリアルタイム圧縮が欲しいなら、Clustersというアプリがある。有料だけど。

Mountain LionにXcode 3をインストール

OS再インストールに伴い再びML上にXcode 3を入れる機会が巡ってきた。

やはりカーネルパニックで強制シャットダウンは気持ちのいいものではないので、調べてみたらKPを回避してインストールする方法を見つけた。素敵過ぎる。

  1. Xcode 3.2.6のDMGをマウントし、中身を丸ごとターミナル経由でコピーする(Finderだと不可視項目をコピー出来ない)。
    cp -R /Volumes/Xcode\ and\ iOS\ SDK/ ~/Desktop/Xcode

  2. インストールスクリプトを編集し、カーネルパニックの原因となるパッケージをインストールされないようにする。

    ~/Desktop/Xcode/Xcode and iOS SDK.mpkg/Contents/iPhoneSDKSL.dist
    【145行目付近】
    function isDevToolsCompatible()
    {
        if ( system.env.COMMAND_LINE_INSTALL == 1 ) { return true; }
        if( system.compareVersions(my.target.systemVersion.ProductVersion, '10.6.6')  >= 0 && system.compareVersions(my.target.systemVersion.ProductVersion, '10.7') < 0 ) {
            return true;
        }
        return false;
    }
    ↓
    function isDevToolsCompatible()
    {
        return true;
    }
     
    --------
    【182行目を削除】
    <line choice="XcodeExtrasHIDDEN"/>
    ↓
    (削除)
     
    --------
    【425〜433行目を削除】
    <choice
            id="XcodeExtrasHIDDEN"
    	customLocation = '/'
            customLocationAllowAlternateVolumes = 'YES'
            start_visible='false'
    >
            <pkg-ref id="com.apple.pkg.Xcode_MacOSX10.6_Extras"/>
    </choice>
     
    ↓
    (削除)
     
    --------
    【528〜529行目を削除】
    <pkg-ref id="com.apple.pkg.Xcode_MacOSX10.6_Extras" auth='root'>file:../Packages/Xcode_MacOSX10.6_Extras.pkg</pkg-ref>
     
    ↓
    (削除)
     
    --------
    【650行目を削除】
    <pkg-ref id='com.apple.pkg.Xcode_MacOSX10.6_Extras' installKBytes='14742'/>
    ↓
    (削除)

  3. コピーしたXcode and iOS SDK.mpkgを実行する。「“Xcode and iOS SDK”を開くには、インストーラを終了してから再度開く必要があります。」と出るので、そのまま[OK]を押す。インストーラを32ビット版で開き直してるらしい。
  4. 「証明書切れ〜」と言われるが、気にせず[続ける]押下。インストールパッケージの選択画面まで進める。
  5. インストールパッケージの選択でSystem Toolsのチェックを外す。さもないとCHUDのカーネル拡張が悪さをしてカーネルパニックになる。UNIX Developmentを選んだ場合、後ほど対応が必要。iOS SDKは古過ぎて開発には使えないので入れる必要もないだろう。その他のオプションはご自由に。
  6. 途中で「iTunesを終了せよ」的なダイアログが出てきた場合、iTunesを終了すると共にアクティビティモニタから「iTunes Helper」も終了させる。
  7. /Developer/usr/bin の中の壊れているシンボリックリンクを修正。……といっても、それらしきものは見つからなかったのでスルー。
  8. インストールオプションでUNIX Developmentを選択し、かつXcode 4のCommand Line Toolsを既にインストールしていた場合、Command Line Toolsを再インストールする。UNIX Developmentで置き換わってしまったため。
  9. インストールが終わったら、/Developer/PlatformsにMacOSX.platformディレクトリだけが存在している事を確認。他のplatformがあったらtmpディレクトリを作りその中に移動する。さもないとInterface Builderが起動しない。
  10. インストール完了!

OS X v10.8にXcode 3.2.6を強制インストールしようとすると、途中で突然Macがブラックアウトし再起動中に再び落ちるという、お顔真っ青ループに陥る。

Xcode 3に含まれるカーネル拡張が悪さをしてるので、当該kextを削除してやればおkという訳で、作業の覚書。といってもここの手順に従うだけ。

先述したが、インストール中に問答無用で落ちるので、他のアプリなどが動いていない状態で実行した方が良い。あと自己責任で。消してるkextから想像するに、プロファイラ系のツールが使えなくなるかもしれない(激しく未確認→やはりプロファイラが使えなくなっていた)。

  1. 復旧スクリプトを準備する
    fsck -fy
    mount -uw /
    rm -rf /System/Library/Extensions/AppleProfileFamily.kext
    rm -rf /System/Library/Extensions/CHUD*.kext

    (2013-04-03追記) スクリプトファイルを作ったら chmod +x /path/to/repair-script で実行属性を付ける。

  2. Xcode 3のDMGをマウントし、ターミナルを開いてインストーラを起動する

    cd "/Volumes/Xcode and iOS SDK"
    COMMAND_LINE_INSTALL=1 open "Xcode and iOS SDK.mpkg"

  3. iOS SDKは除いてXcodeをインストールする。さもないとInterface Builderが使えなくなる。
  4. インストール終盤でカーネルパニックで落ちるが、気持ちを落ち着かせながら電源断。
  5. シングルユーザーモードでブート(⌘+Sを押しながら起動)し、準備してある復旧スクリプトを実行&再起動。スクリプトを使わずに手打ちでも当然おk

    /path/to/repair-script
    reboot

以上で、無事Macが立ち上がるようになり、Xcode 3も使えるようになる。あぼーんしてたらごめんなさい。

どうでもいいけど、Xcode 4って使いづらくないっすか。どーも1ウィンドウに全てを押しこむインタフェースは好きじゃない。

デバッガが使いにくくて死にそう。“3が付く”某ゲーム機のデバッガを彷彿とさせる使いにくさ。

BootCampのWindowsがCACHE_MANAGERで落ちる問題の対処方法

BootCampドライバをインストール後、WindowsがCACHE_MANAGERなんたらでブルースクリーンになるのは、HFSを読み込むためのドライバのせい。 ストレージにMacのソフトウェアRAIDパーティションがあると、この問題が発生する。

AppleHFS.sysAppleMNT.sysを適当にリネームしてもいいが、ソフトウェアRAIDパーティションのあるドライブをデバイスマネージャで無効化するのが、手っ取り早くておすすめ。ドライバ無効化と違い、当然他のHFSボリュームは活かせるしね。

↑では既に無効になっている状態。

ドライバ導入済みで、起動→ハング→再起動→ハングの無限ループに陥ってるなら、セーフモードで無効化すべし。

サーバのESXi化が泥沼化 完結編

なんかもう書くのも面倒になってきた。

H77のSATAをデバイスパススルーするとPSoDでESXiごと死ぬのは、ESXi 5.1のバグの模様(Esxi 5.1 pci passthrough broken)。ESXi 5.0 Update 1を入れ直して、諸々設定し直したら何の問題も無くパススルー出来た。

結論。5.1はカス。

5.1にしたら今まで出来てたパススルーが出来なくなった報告が随所で上がってるので、PCIパススルーを使いたい人は5.0U1に留まるのが吉。

5.1のvSphere Clientはバギーだし(日本語ロケールだとデータストア作成出来ないとかアホかと)、仮想マシンバージョン9のVMはWeb Clientからじゃないと作れないとか、Web Clientは有償版(vCenter Server?)でしか使えないとか。

結論。5.1はカス。

いや、まぁ、無償で使わせて貰ってるので文句言える立場にはないが……。

サーバのESXi化が泥沼化 その2 - SATAコントローラの追加

前回、H77のSATAをパススルーしたら他のSATA I/Fが認識されなくなったのは、AHCIのドライバが読み込まれなくなったせいらしい。

ESXiの各種ドライバは、ESXiが公式に対応するデバイスが存在して初めて読み込まれる仕組みになっているそうなので(まぁそりゃそうか)、H77がパススルーによって見えなくなる→AHCIドライバが読み込まれない→他のSATA I/Fが使えないという状態だった模様。これまでASM1061と88SE9123は、H77 SATAのおこぼれで偶然動いていたというわけ。

デバイスとドライバの対応表を弄れば、非公式デバイスを使えるようになるっぽいので書き換えてみる。

下記作業ログ内に出てくるsata-ahc.v00は、sata-ahc.v00(ハイフン)な環境とsata_ahc.v00(アンダースコア)な環境がある模様。自分の環境では間違いなくハイフンなんだけど謎。コマンドをコピペされる際は注意されたし。

5.1をクリーンインストールした場合はアンダースコア、5.0から5.1にアップデートした場合はハイフンな模様。

  1. ESXiホストにSSHでログイン
  2. lspciコマンドで追加したいデバイスのベンダIDとデバイスIDを確認(必要な箇所のみ抜粋)
    # lspci -v
    000:001:00.0 SATA controller Mass storage controller: Marvell Technology Group Ltd. 88SE9123 PCIe SATA 6.0 Gb/s controller [vmhba34]
    	 Class 0106: 1b4b:9123 ←これ
    
    000:006:00.0 SATA controller Mass storage controller:   [vmhba36]
    	 Class 0106: 1b21:0612 ←これ

  3. hwinfoコマンドでサブIDを確認(5.0のみ。5.1だとコマンドがなくサブIDは0000:0000で大丈夫っぽい?)

    # hwinfo -p
    000:001:00.0 1b4b:9123 1b4b:9123 11/ 11/0x88 A V ahci         vmhba34
    000:006:00.0 1b21:0612 1849:0612  5/  5/0xa0 A V ahci         vmhba36
                              ↑これ

  4. マップファイルを展開

    ~ # cd /tmp
    /tmp # mkdir tweak; cd tweak
    /tmp/tweak # vmtar -x /bootbank/sata-ahc.v00 -o sata-ahc.tar
    /tmp/tweak # tar xvf sata-ahc.tar 

  5. マップファイルに上で確認したデバイスを追加

    /tmp/tweak # vi etc/vmware/driver.map.d/ahci.map
    (↓を最後に追加)
    regtype=linux,bus=pci,id=1b4b:9123 1b4b:9123,driver=ahci,class=storage
    regtype=linux,bus=pci,id=1b21:0612 1849:0612,driver=ahci,class=storage

  6. vSphere Client上でストレージアダプタ名を正しく表示させたければ、The PCI ID Repositoryでベンダ名とデバイス名を探して、デバイス名リストに追加する。デバイス行のインデントはタブ文字なので注意。弄らなくても動作に支障はない。

    /tmp/tweak # vi usr/share/hwdata/driver.pciids.d/ahci.ids
    1b4b  Marvell Technology Group Ltd.
            9123  88SE9123 PCIe SATA 6.0 Gb/s controller
    1b21  ASMedia Technology Inc.
            0612  ASM1062 Serial ATA Controller

  7. 編集したファイルをアーカイブし直し、元のアーカイブを上書き

    /tmp/tweak # rm sata-ahc.tar
    /tmp/tweak # tar cvf sata-ahc.tar etc usr
    /tmp/tweak # vmtar -c sata-ahc.tar -o sata-ahc.vgz
    /tmp/tweak # mv sata-ahc.vgz /bootbank/sata-ahc.v00

  8. 再起動

上手く追加出来てればvSphere Clientから正しく認識される。追加前と追加後でvmhbaの割り当て順が変わってるが、まぁキニシナイ。

これでようやくH77 SATAのパススルーが出来る!と、喜び勇んで設定&FreeBSDのVMに割り当てて起動!そして、PSoD………/(^o^)\ナンテコッタイ

  • start.txt
  • 最終更新: 2022-07-27 15:26
  • by Decomo