2009/05/21(木)奇数 or 偶数ファイルのみ引っかける

○○_p01.foo, ○○_p02.foo, ○○_p03.foo … ○○_p99.fooというファイルがあった時に、奇数番号のファイルだけ引っかける場合Windowsだと次のような検索条件となる。

*1.foo *3.foo *5.foo *7.foo *9.foo

Linuxなどgrepが使えればこんな感じ

grep ^.*[13579]\.foo$

Windowsの標準機能でもっとスマートに検索を行えないものか…

2009/05/17(日)ファイルサーバ

現状のファイルサーバのストレージ利用率がそろそろ75%を超えるので増強計画を図っている。

$ df -h
Filesystem          サイズ  使用  残り 使用% マウント位置
/dev/sda3             2.0G  213M  1.7G  12% /
tmpfs                 1.8G     0  1.8G   0% /lib/init/rw
udev                   10M  116K  9.9M   2% /dev
tmpfs                 1.8G     0  1.8G   0% /dev/shm
/dev/sda1             122M   28M   88M  24% /boot
/dev/sda7             1.6T  954G  679G  59% /data
/dev/sda6             9.9G  151M  9.2G   2% /home
/dev/sda5             7.9G 1004M  6.5G  14% /usr
/dev/sda2             4.0G  527M  3.3G  14% /var
/dev/sdf1             126G   54G   72G  44% /data/temp1
/dev/sdg2             122G   82G   40G  68% /data/temp2
/dev/md0              376G  369G  6.7G  99% /data/SW_RAID

で構想を練る

  • OSはDebian GNU/Linux 5.0(lenny)を採用
  • メモリは最大構成の4GBまで増強
  • OS領域はIBM ServeRAID-4Lx + U160 18.2GB HDD×3でRAID1 + ホットスペアとする
  • データ領域はSATA II 1.5TB HDD*1でRAID1構成*2
  • ファイルシステムはext3を使用する
  • 外付けのSCSI HDDがあるので、それを利用出来るようにU160以上のSCSI HBAを用意する
  • ネットワークはオンボードが100BASE-TXなので利用せず、Intel PRO/1000系のカードを用意

*1 : 2TBのHDDを使いたいのだけど、コストとの折り合いが付かないので(苦笑

*2 : RAID5構成にしたいのだけど、作成できる論理ドライブのサイズが2TBまで(アレイコントローラの制約)なので

バックアップ

現状の構想ではデータ領域は実利用領域が7TB程度*3まで拡張可能な為、現状の光学メディアに落とすのは現実的ではない*4。現実的な案としてはLTO4などのテープドライブか、ディスクのどちらか。保存性としてはテープがいいのだろうけど、LTO4ドライブはとても手が出る代物ではないし*5*6、テープメディアのコストも結構する為SATA HDDへ取得することにする。

運用が楽そうな裸族のお立ち台シリーズでも買ってこよう。
LinuxでのeSATAの接続って、USB接続と同じようにアンマウント状態にして外せばいいのか?

*3 : 物理容量は11TB程度

*4 : Blu-ray DLでも50GB程度しか取れないし

*5 : 価格的に。

*6 : LTO1/2のドライブなら手が届く価格帯だけど、LTO1/2程度の容量では話にならない

ところで

実際に使うよりも、こうして構想を練っている方が楽しいのは自分だけでしょうか?

ddの進捗を確認する

2009/04/25PC::Linux/BSD

HDDのフォーマット前の作業などにddをよく使うのだが、進捗が表示されないのでどこまで完了しているのかが不明なところが使いづらい。

そんなわけで、ddの進捗を確認する方法を調べたところ、SIGUSR1シグナルをddに投げればいいらしい。

やってみた

$ dd if=/dev/zero of=/dev/null bs=10M &
[1] 8237
$ ps ax|grep dd
 8237 pts/1    R      0:06 dd if /dev/zero of /dev/null bs 10M
 8239 pts/1    S+     0:00 grep dd
$ kill -SIGUSR1 8237
$ 34411+0 records in
34410+0 records out
360815001600 bytes (361 GB) copied, 19.9085 seconds, 18.1 GB/s

$ kill -SIGUSR1 8237
$ 52939+0 records in
52938+0 records out
555095162880 bytes (555 GB) copied, 31.2714 seconds, 17.8 GB/s

$ fg
dd if=/dev/zero of=/dev/null bs=10M <- ここでCtrl-Cを実行
68153+0 records in
68152+0 records out
714625515520 bytes (715 GB) copied, 39.9663 seconds, 17.9 GB/s

$

これでddが使いやすくなる。

参考

ddの進捗確認方法

[Calc] 図形のサイズを変える

概要

com.sun.star.drawing.GraphicShapeObjectの大きさを変える。

環境

OpenOffice.org Calc 3.0.0

コード

目的

別記事「[Calc] ファイル選択ダイアログを開き、選択された画像を挿入する」にて挿入した画像を、アスペクト比を保ちながらサイズの変更を行う。

上記の別記事中のマクロに続いて処理を実行させる場合、挿入された画像のDrawPageオブジェクトのインデックスは、対象シート中のDrawPageオブジェクトの中で最大となる。このため、処理対象画像の選択はインデックスにて判定(最大のインデックス値を持つ画像を対象)を行っている。

const MAX_WIDTH as Integer = 10000 ' 10cm
const MAX_HEIGHT as Integer = 10000

sub resizePicture

    dim sheet as Object
    dim drawPg as Object
    dim draw as Object

    sheet = ThisComponent.CurrentController.ActiveSheet
    drawPg = sheet.getDrawPage
    
    if drawPg.getCount > 0 then
        'インデックスが最大のオブジェクトを対象とする
        draw = drawPg.getByIndex( drawPg.getCount - 1 )
    else
        exit sub
    end if

    dim scale as double
    dim drawResize as new com.sun.star.awt.Size

    '拡大率を求める
    if draw.Size.Width > draw.Size.Height then
        '横長の場合
        scale = MAX_WIDTH / draw.Size.Width
    else
        '縦長の場合
        scale = MAX_HEIGHT / draw.Size.Height
    end if

    with drawResize
        .Width = draw.Size.Width * scale
        .Height = draw.Size.Height * scale
    end with

    draw.setSize(drawResize)
end sub

ところで

数値変数の型の最大値と最小値はどこかに定数として用意されているのでしょうか?

[Calc] ファイル選択ダイアログを開き、選択された画像を挿入する

概要

メニュー「挿入 - 画像 - ファイルから」に相当するマクロ

環境

OpenOffice.org Calc 3.0.0

コード

sub insertPicture
    dim document as Object
    dim dispather as Object

    ' get access to the document
    document = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

    ' ファイル選択ダイアログの初期化
    dim filePickerDlg as Object
    filePickerDlg = createUnoService("com.sun.star.ui.dialogs.FilePicker")
    filePickerDlg.appendFilter( _
        "JPEG画像ファイル(*.jpg, *.jpeg)", "*.jpg", "*.jpeg")

    if filePickerDlg.execute = 1 then
        'ファイルが指定された場合

        dim selFiles() as String
        selFiles() = filePickerDlg.getFiles()

        dim picInfo(2) as new com.sun.star.beans.PropertyValue
        picInfo(0).Name = "FileName"
        picInfo(0).Value = selFiles(0)
        picInfo(1).Name = "FilterName"
        picInfo(1).Value = "JPEG - Joint Photograhpic Experts Group"
        picInfo(2).Name = "AsLink"
        picInfo(2).Value = false

        'ダイアログで指定された画像をアクティブセルへ挿入
        dispatcher.executeDispatch(document, ".uno:InsertGraphic", _
             "", 0, picInfo())
    end if

end sub