CentOS 5をプログラミング環境で使う

ファイルシステムについて

Linux(CentOS)で使用するファイルシステム

ネットワーク・ファイルシステム

Windowsのファイル共有をUNIXから利用する

Samba clientのsmbmountを使用する

mountコマンドでファイルシステムタイプにcifsを指定する

暗号ファイルシステム

暗号ファイルシステムの一覧

ファイルシステム名 概要 実行空間
CFS:the Cryptographic Filesystem local loopback NFSマウントにより既存ファイルシステムの一部を暗号化する。アルゴリズムを数種類から選択可能 ユーザ空間
dm-crypt ブロックデバイスに対して暗号化する カーネル空間
eCryptfs

暗号ファイルシステムの詳細

CFS

dm-crypt

ブロックデバイスなので、ディスクパーティション自体に暗号化を行います。(例:/dev/sda3)
そこで、まず専用のパーティションを作成します。不良セクタチェック後、パーティションをランダムデータで埋めて(セキュリティ強度を向上するため)、cryptsetupコマンドでパーティションを暗号化します。

暗号化したパーティションを、Device Mapperでマッピングします。

暗号化パーティション作成

cryptsetupコマンドを使用し、使用する暗号アルゴリズム、鍵長、対象デバイスファイル名を指定します。

暗号には、カーネルが提供するアルゴリズムを指定できます。

# cryptsetup -y luksFormat --cipher aes-cbc-essiv:sha256 --key-size 256 /dev/sdb1

WARNING!
========
This will overwrite data on /dev/sdb1 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Command successful.
#

YESはプロンプトにあるとおり、大文字で入力する必要があります。パスフレーズは忘れると大変です。

Device Mapperでマッピング

# cryptsetup luksOpen /dev/sdb1 encdisk
Enter LUKS passphrase:
key slot 0 unlocked.
Command successful.
# ls /dev/mapper
control  encdisk  VolGroup00-LogVol00  VolGroup00-LogVol01
#

ファイルシステムの作成(ext3)

ここでは、マッピングされたデバイス /dev/mapper/encdiskに対してext3でファイルシステムを作成します。

/sbin/mke2fsコマンドを使用します。

# mke2fs -j /dev/mapper/encdisk
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
524288 inodes, 1047976 blocks
52398 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1073741824
32 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
#

ファイルシステムのマウント(手動)

# mkdir /mnt/edisk
# mount /dev/mapper/encdisk /mnt/edisk
# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                       9014656   1071392   7477960  13% /
/dev/sda1               101086     11705     84162  13% /boot
tmpfs                   257764         0    257764   0% /dev/shm
/dev/mapper/encdisk    4126048     73804   3842652   2% /mnt/edisk
#

暗号ファイルシステムに関する情報源

全般

ファイルシステム固有

CFS:the Cryptographic Filesystem

dm-crypt

eCryptfs

パフォーマンス

ディスクのパフォーマンス

hdparmコマンド

IDEのハードディスクに関するパラメータを表示・設定するコマンドです。

HDDがサポートする機能を確認する

チューニング前に、使用するHDDがサポートする機能を確認します。

# hdparm -i /dev/hda

/dev/hda:

 Model=IC35L120AVV207-0, FwRev=V24OA63A, SerialNo=xxxxxxxxxxxxxxxx
 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }
 RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=52
 BuffType=DualPortCache, BuffSize=1821kB, MaxMultSect=16, MultSect=16
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=241254720
 IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes:  pio0 pio1 pio2 pio3 pio4
 DMA modes:  mdma0 mdma1 mdma2
 UDMA modes: udma0 udma1 *udma2 udma3 udma4 udma5
 AdvancedPM=yes: disabled (255) WriteCache=enabled
 Drive conforms to: ATA/ATAPI-6 T13 1410D revision 3a:  ATA/ATAPI-2 ATA/ATAPI-3 ATA/ATAPI-4 ATA/ATAPI-5 ATA/ATAPI-6

 * signifies the current active mode

DMA modesで、DMA転送設定の機能有無、UDMA modesで、UATAの種類が分かります。

udma2: Ultra ATA/33, udma4: Ultra ATA/66, udma5: Ultra ATA/100, udma6: Ultra ATA/133

DMA転送設定

現在のLinuxドライバのDMA転送設定の有効無効を確認します。

# hdparm /dev/hda

/dev/hda:
 multcount    = 16 (on)
 IO_support   =  0 (default 16-bit)
 unmaskirq    =  0 (off)
 using_dma    =  1 (on)
 keepsettings =  0 (off)
 readonly     =  0 (off)
 readahead    = 256 (on)
 geometry     = 16383/255/63, sectors = 241254720, start = 0

上記で下線を引いたusing_dmaの値がonかoffでDMA設定の有効無効が確認できます。

DMA設定を変更するには、hdparmコマンドの-dオプションを使います。

# hdparm -d1 /dev/hda
# hdparm -d0 /dev/hda

その他の設定

DMA転送設定で見たDMA以外の項目も実際のHDDによってチューニング可能です。

IO_support

EIDEの32ビットI/Oサポートを指定します。

IO_supportの値 内容
0 32ビットI/Oを無効(16ビット使用)
1 32ビットI/Oを有効
3 32ビット同期I/Oを有効

昨今のHDDなら、3の32ビット同期I/Oか?

# hdparm -c3 /dev/hda
unmaskirq

HDDへのコマンド中(待ち時間)に、他の割り込みに対する応答を許す/許さない。

unmaskirqの値 内容
0 ディスク割り込み処理中に他の割り込みのマスクを解除しない
1 ディスク割り込み処理中に他の割り込みのマスクを解除可能

ディスクI/O中に他の割り込みを許可することでLinuxの応答性を改善することができますが、ディスクのアクセス性能が改善するわけではありません。

# hdparm -u1 /dev/hda
転送モード(xfermode)

HDDとの転送に使用するモードを詳細指定します。

転送モード 指定値 転送モード 指定値
PIO Mode 0 08 Ultra DMA Mode 0 64
PIO Mode 1 09 Ultra DMA Mode 1 65
PIO Mode 2 10 Ultra DMA Mode 2(UATA/33) 66
PIO Mode 3 11 Ultra DMA Mode 3 67
PIO Mode 4 12 Ultra DMA Mode 4(UATA/66) 68
Single word DMA Mode 0 16 Ultra DMA Mode 5(UATA/100) 69
Single word DMA Mode 1 17 Ultra DMA Mode 6(UATA/133) 70
Single word DMA Mode 2 18
Multi word DMA Mode 0 32
Multi word DMA Mode 1 33
Multi word DMA Mode 2 34
# hdparm -X66 /dev/hda

アクセス速度の計測

ディスクのアクセス速度を計測するには、hdparmコマンドの-tTオプションを使います。

# hdparm -tT /dev/hda
/dev/hda:
 Timing cached reads:   640 MB in  2.00 seconds = 320.06 MB/sec
 Timing buffered disk reads:   80 MB in  3.04 seconds =  26.31 MB/sec