2013-01-05

ドライブの容量情報を入手するスクリプト dMan

「Mac mini」の内蔵HDDのSSD化をする前に、これまでの「ドライブ毎の容量情報;容量=Size、使用済み量=Used、使用可能量=Avail(able)、使用率=Capacity(?)」を収集するスクリプトを書いてみたので報告する。

これまで、 記憶ドライブの容量情報を取るには幾つかの方法を使う ;
  1. Finderで「/Volumes」を開き、該当するドライブの「パーティション名」を右クリックして、「情報を見る: Get Info」からメモをとる。
  2. GUIの「Disk Utility」を開き、該当するドライブの「パーティション名」をクリックして、「情報を見る: Get Info」からメモをとる。
  3. Terminalで、「df -H」を打ち、それを見る。
一見、 「df -H」が合理的に見えるが、外付けドライブの表示順番は「パーティション名」のアルファベット順らしい。逆にいえば、見慣れている「Disk Utility」の様に、ドライブ毎にパーティションの設定した準に出てこないので、混乱する。

そこで、 「df -H」の出力を「Disk Utility」の順番に表示させ、後の整理の為に「カンマ区切りの.csv」を生成する「bashスクリプト: dMan」を作った。その結果と、スクリプトを紹介する。

下図1は、 「Disk Utility」で最下段に出ているパーティション「MOKU3_X8.1」をクリックをした状態の上に、ターミナル上で「dMan」を打った所のスクリーン・ショットを示している;

図1 「Disk Utility」と「dMan」とで同じパーティション「MOKU3_X8.1」を比較。
 となる。赤い長方形の囲みはパーティション「MOKU3_X8.1」の情報を示します。両者の間で、対応する数値が正しく一致していることが判ります。

さらに重要なのは、「Disk Utility」の左ペインに出てくるパーティション名の順番は、「dMan」の「Mounted_on_/Volumes/」の列の順序と完全に対応していることです。すなわち、日頃チェックしている「Disk Utility」の容量データに加えて消費率(Capacity)が簡単に入るのが自慢です。

さらに、 「dMan」はターミナル出力と同時に「.csv」ファイルを一定のディレクトリに保存できるので、表計算ソフトウェアでさらに作業メモに取り込む事が簡単にできます。上記の「.csv」ファイルの結果をターミナルに表示した例を示します;
u1@mmX75:~/bin $
u1@mmX75:~/bin $ cat ~/Desktop/dMan2013-01-04-233108.csv
Filesystem,Size,Used,Avail,Capacity,Mounted_on_/Volumes/
/dev/disk0s02,499G,93G,406G,19%,mmX7.5_->_/
/dev/disk1s02,239G,91G,148G,39%,ss1X7.5
/dev/disk2s02,64G,1.2G,63G,2%,sd2
/dev/disk3s02,259G,64G,195G,25%,Pyon4div-mmX7.3
/dev/disk3s04,241G,304M,240G,1%,Pyon
/dev/disk3s05,500G,292G,208G,59%,YomoTM
/dev/disk3s06,500G,6.1G,493G,2%,Kuri4_div-Lion1071
/dev/disk3s08,499G,333G,167G,67%,Moku
/dev/disk4s02,1.0T,664M,1000,1%,PYON_1
/dev/disk4s03,250G,313M,250G,1%,YOMO
/dev/disk4s04,125G,84G,40G,68%,KURI1_mmX7.5
/dev/disk4s06,125G,224M,125G,1%,KURI2
/dev/disk4s07,125G,224M,125G,1%,KURI3
/dev/disk4s08,125G,76G,49G,61%,MOKU1_div-mmX7.4
/dev/disk4s10,125G,79G,45G,64%,MOKU2_div-mmX7.4
/dev/disk4s12,123G,7.9G,115G,7%,MOKU3_X8.1
u1@mmX75:~/bin $
 これで、「Mac mini」のSSD化や、ファイル・システムのフォーマット変更が安心して出来るようになりそうです。なお、この.csvファイルをダブル・クリックすると「Excel 2011 for Mac」で開く事が出来ました。運用法はまだ良くわかっていません。

 なお、「dMan」 は bashスクリプトです;

#!/bin/bash
#
# dMan: dirives Manager
#     • Turn on power for each drives
#     • type dMan,
#         中間結果:ターミナルに「リスト表示(スペース区切りのまま)」し、
#         出力ファイル:「$HOME/$f_dir/aMyyyymmdd-hhmmss.csv」
#             「f_dir」の初期値は、「Desktop」としてある。適宜、書き替えてください。
f_dir="drivesManager"  # ←––––––––– ここを替える!

#==================================================#
# Origina: 2013-01-03 by mNeji on Lion 10.7.5
# Rev.1: 2013-01-04  (金) 23:30
# Rev.2: 2013-01-05  (土) 14:52 settingDirectory() 追加
# Rev.3: 2013-01-08  (火) 21:41 「起動ドライブ名の入手」で、"_-"を追加
# Rev.4: 2013-01-09  (水) 11:57 Terminal表示改善
# Rev.5: 2013-01-14  (月) 11:43 Call dManYYYY-MM-DD-hhddss.csv, dMan.xlsm
#==================================================#

settingDirectory() {
    myDir="$HOME/$1"
    if [ ! -d $myDir ]; then
        echo "  $myDir is created"
        mkdir -p $myDir
        ll $1
    fi
    echo "---> dMan: save data to $myDir"
}

# $f_dirのチェック
settingDirectory "$f_dir"


#
#### ルート・ドライブ「/」に対応する起動ドライブ名の入手:
ttt=`ls -l /Volumes/ | grep " -> "`
sB=`echo "$ttt" | sed -e "s%.* \([a-zA-Z0-9._-]*\) -> /$%\1%"`

#### "df -H"のデータ・ファイル, dfH確保  :無駄に長い「/Volumes/」を抜く
dfH=`df -H | sed "s%/Volumes/%%"`

### ヘッダ部分の切り出し

z_h=`echo "$dfH" | grep Filesystem | sed "s%ted on%ted_on_/Volumes/%"`



# 物理的なドライブのデータを引き出し、/dev/diskNsMのMを二桁整数に変えてソート

z_d=`echo "${dfH}" |grep "/dev/disk"`
z_d=`echo "${z_d}" | sed -e "s%\(/dev/disk[0-9]s\)\([0-9] \) \(..*$\)%\10\2\3%" |sort `

# "/(ret)"を起動ドライブ名に取り替え
z_d2=`echo "$z_d" | sed "s%/$%/__<-__${sB}%"`

# 説明の表示
echo "---> リスト表示(スペース区切りのまま)"

# ターミナルに中間表示
zmid=`echo "$z_h";echo "$z_d2"`
echo "------------------------------------------------------------------"
echo "$zmid"

# 区切りの処理; 種類
fil=","
#fil=" "`
t_stamp=`date +'%Y-%m-%d-%H%M%S'`
echo "$zmid" | sed "s%  *%$fil%g" > "${HOME}/${f_dir}/dMan${t_stamp}.csv"
echo "------------------------------------------------------------------"
echo "---> dMan: data saved to dMan${t_stamp}.csv <---"

# call Call dManYYYY-MM-DD-hhddss.csv, dMan.xlsm with Excel

open ${HOME}/${f_dir}/dMan${t_stamp}.csv
open ${HOME}/${f_dir}/dMan.xlsm

【プログラム製作中に気づいた点】
  • 「df -H」でのパーティション順が、「Disk Utility」のそれと一致しない点。
    • 「df -H」では全てのパーティションのアルファベット順。
    • 「Disk Utility」では「/dev/diskNsM; N=0..., M=1...」としたばあい、Nはディスク(ドライブというべきか)番号、Nはパーティション番号で、そのN,Mの順に表示している訳です。問題は、N=(0,1,2,...,9,10,11..)と付けられているのです。
    • 実際にNは「diskutil list」で見ると判りやすいですが、ドライブ毎に「EFI」一つのパーティション数を使い、さらにそのパーティションが起動可能な場合、「
      Recovery HD」にもパーティション数を使う様です。従って、この場合、N=(00,01,02,...,09,10,11..) と二桁フォーマットに揃えてから、ソートしないと駄目でした。
  • 「df -H」では、パーティション名は大文字小文字を区別しないようだ。
    • 「Disk Utility」では「Pyon」と「PYON」とは問題なく区別されていると、思っていた。
    • 「df -H」では「/dev/disk3s4: Pyon」と「/dev/disk4s2: PYON 1」と表現されていた。
    • そこでFinderから「/dev/disk4s2: PYON_1」と変えてしまった。やはりformatが「Mac OS Extended(Journaled)」では、パーティション名の大文字小文字の差は完全に区別できないようだ。今後のUnix系のプログラムの事も考えて、formatが「Mac OS Extended(Case-sensitive, Journaled)」にしたほうが良さげ。
    • また、 パーティション名に空白( )を使うと、.csv化する時に面倒くさくなる。今後は絶対に使うのを止めることにする。
【おまけ: 簡単なコマンド】
  パーティション数は一桁の範囲なので、簡単なコマンドが欲しい場合;
df -H | grep "^/dev/disk" |sort

【「Excel 2011 for Mac」との連携】

下図2の様に示すように;
  1. ターミナルからdManを実行すると、ターミナル上に情報が打ち出されるとともに、
  2. そのcsvファイルがExcelで開かれ、
  3. 纏めファイル、dMan.xlsmもExcelで開かれろ。

図2 dManの実行結果

このcsvファイルを纏めファイルに追加するには、下図3に示されるように、左上のExcelのシート名(dMan2013-01-15-085210.csv)のタブをドラッグして、右側のExcelのデータ部分にドロップする;

図3 「ドラッグ & ドロップ」によるデータ追加
まだこの作業は自動化できていない。


ーーーー
この記事の履歴
  1. 開始 2013-01-05  (土) 00:43 
  2. 追加 2013-01-05  (土) 12:45  【おまけ: 簡単なコマンド】
  3. 修正 2013-01-06  (日) 12:46 dManのヴァージョン改訂 
  4. 修正 2013-01-14  (月) 12:15 dManのヴァージョン改訂  
  5. 追加 2013-01-15  (火) 20:05  【「Excel 2011 for Mac」との連携】

0 件のコメント:

コメントを投稿

注目の投稿

Terminalでの、なんちゃってViモドキ

近頃、ようやくKarabiner-Elementsに慣れてきたので、 Terminalで動作する「擬似Vi-Mode」を作って見たので、ご紹介します。 『概要』 「擬似Vi-Mode」の所以は、方向キー「←↓↑→」を通常の「hjkl」ではなくて「jkil」としました。これ...