Macのディスク暗号化による書き込み速度の低下
Macでは、ディスクをフォーマットする際にドライブ(パーティション)全体を暗号化することができる。この設定を行うと、パーティションのマウント時にパスワードの入力が求められるため、他人にデータを盗み見られることを防ぐことができる。
特にUSBメモリやSDカードなどのリムーバブルドライブに対して、紛失時のデータ保護が期待できることから、僕はMicroSDカードをフォーマットする際に暗号化オプションを利用している。
しかし最近、このドライブにアクセスする際のもたつきが気になってきたので、ドライブの暗号化によるデータ転送速度の変化を確認してみた。
環境
- MacBook Air 13-inch, Early 2014
- [MicroSDカードアダプター EAD-103ARD]
iSlice Air 13" MacBook Air 13インチ専用 Early2015モデル対応 microSDカードアダプター レッド EAD-103ARD
- 出版社/メーカー: T's Glocal
- メディア: エレクトロニクス
- この商品を含むブログを見る
- 64GB MicroSDXC 東芝製
東芝 microSDXC 64GB Class10 UHS-I 防水 耐X線 TOSHIBA 海外向パッケージ品 [並行輸入品]
- 出版社/メーカー: 東芝
- メディア: エレクトロニクス
- この商品を含むブログを見る
データ書き込み速度ベンチマーク
暗号化ドライブと非暗号化ドライブそれぞれに対して、ddコマンドを使って512MByte分のゼロ及び乱数データの書き込みを行う際の処理時間を10回計測した。それぞれ最大値と最小値を除外した8時点のデータについて比較した。
結果
データ種別 | ドライブ暗号化 | 平均時間[sec] | 標準偏差 | 平均速度[Mbyte/sec] |
---|---|---|---|---|
乱数 | あり | 70.904 | 8.157 | 7.221 |
乱数 | なし | 9.494 | 0.428 | 53.929 |
ゼロ | あり | 77.847 | 19.679 | 6.577 |
ゼロ | なし | 8.922 | 0.405 | 57.386 |
ゼロデータ及び乱数データのいずれにおいても、暗号化ドライブに対する書き込みは、非暗号化ドライブに対する書き込みより7倍程度遅いことが分かった。
結論
SDカードのようなリムーバブルディスクの紛失に備えて、ドライブの暗号化は欠かすことができない安全対策である。しかし、データの書込み速度の低下はかなり大きいため、データの書換えを頻繁に行う場合には、SSDなど適切なローカルドライブを活用するようにしたい。
検証用スクリプト
テストデータ書き込みスクリプト:bench_sd.sh
#!/bin/sh count=128; bs=1m; #128MByte data outputDir=$1; loopNum=$2; if [ $# -ne 2 ]; then echo "usage: $1 [output_dir_path] $2 [trial_num]" 1>&2; exit 0; fi; echo " ===== bench start ====="; echo " *** zero write ***"; for i in `seq $loopNum`; do echo " .. round $[i] .."; dd if=/dev/zero of=${outputDir}/test_zero${i} count=${count} bs=${bs}; done; echo " *** rand write ***"; for i in `seq $loopNum`; do echo " .. round $[i] .."; dd if=/dev/urandom of=${outputDir}/test_rand${i} count=${count} bs=${bs}; done; echo " ===== bench done ====="; exit 0;
検証の実行
1. テスト実行
# 非暗号化ドライブへの書き込み $ bench_sd.sh /Volumes/SD 10 2>&1| tee bench_sd-normal.log # 暗号化ドライブへの書き込み $ bench_sd.sh /Volumes/SD 10 2>&1| tee bench_sd-encrypt.log # 集計用ファイルの作成 $ awk '{if(/write/) type = $2} {if(/secs/) print substr(FILENAME,10,6)" "type" "$5}' bench_sd-* > result
2. Rによる結果の集計
A <- read.csv("result", header=F, sep=" ") res <- matrix(nrow=0, ncol=5) for (file in unique(A$V1)){ B <- A[A$V1==file,] for (type in unique(B$V2)){ C <- B[B$V2==type,] Cdmax <- C[-(which(C$V3==max(C$V3))),] Cdmaxmin <- Cdmax[-(which(Cdmax$V3==min(Cdmax$V3))),] sd <- round(sd(Cdmaxmin$V3),3) ave <- round(mean(Cdmaxmin$V3),3) spd <- round(512 / ave,3) res <- rbind(res, c(file, type, ave,sd, spd)) } } result <- data.frame(res[order(res[,2]),c(2,1,3,4,5)]) names(result) <- c("dataType", "format", "mean", "sd", "speed") print(result)
本ページには、Amazon.co.jpアソシエイト・プログラムによるリンクが含まれております。