「Ext4」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(参照の追加)
84行目: 84行目:
 
== ファイルベースの暗号化を利用する ==
 
== ファイルベースの暗号化を利用する ==
   
  +
Linux 4.1以降、ext4はファイルベースの暗号化をサポートしています。暗号化用にマークされたディレクトリツリーでは、ファイルの内容、ファイル名、およびシンボリックリンクのターゲットはすべて暗号化されます。暗号化キーはカーネルキーリングに格納されます。機能の詳細、実装状態の概要、実用的な点、カーネル4.1でのテスト結果については、[http://blog.quarkslab.com/a-glimpse-of-ext4-filesystem-level-encryption.html Quarkslabのブログ]の項目も参照してください。
Since Linux 4.1, ext4 supports file-based encryption. In a directory tree marked for encryption, file contents, filenames, and symbolic link targets are all encrypted. Encryption keys are stored in the kernel keyring. See also [http://blog.quarkslab.com/a-glimpse-of-ext4-filesystem-level-encryption.html Quarkslab's blog] entry with a write-up of the feature, an overview of the implementation state, and practical test results with kernel 4.1.
 
   
  +
{{ic|CONFIG_EXT4_ENCRYPTION}}オプションが有効になっているカーネルを使用していて、{{Pkg|e2fsprogs}}パッケージが少なくともバージョン1.43以上であることを確認してください。
Make sure you are using a kernel with the option {{ic|CONFIG_EXT4_ENCRYPTION}} enabled and have the {{Pkg|e2fsprogs}} package updated to at least version 1.43.
 
   
  +
次に、ファイルシステムが暗号化にサポートしているブロックサイズを使用していることを確認します:
Then verify that your filesystem is using a supported block size for encryption:
 
   
 
{{hc|# tune2fs -l /dev/''device'' {{!}} grep 'Block size'|
 
{{hc|# tune2fs -l /dev/''device'' {{!}} grep 'Block size'|
98行目: 98行目:
 
}}
 
}}
   
  +
これらの値が同じでない場合、ファイルシステムは暗号化をサポートしないので'''絶対にこれ以上先には進まないでください'''。
If these values are not the same, then your filesystem will not support encryption, so '''do not proceed further'''.
 
   
  +
次に、ファイルシステムの暗号化機能フラグを有効にします:
Next, enable the encryption feature flag on your filesystem:
 
   
 
# tune2fs -O encrypt /dev/''device''
 
# tune2fs -O encrypt /dev/''device''
   
  +
{{Warning|暗号化機能フラグを有効にすると、4.1より古いカーネルはファイルシステムをマウントできなくなります。}}
{{Warning|Once the encryption feature flag is enabled, kernels older than 4.1 will be unable to mount the filesystem.}}
 
   
  +
次に、暗号化するディレクトリを作成します:
Next, make a directory to encrypt:
 
   
 
# mkdir /encrypted
 
# mkdir /encrypted
   
  +
暗号化は空のディレクトリにしか適用できないことに注意してください。暗号化設定(または「暗号化ポリシー」)は、新しいファイルとサブディレクトリによって継承されます。既存のファイルの暗号化はまだサポートされていません。
Note that encryption can only be applied to an empty directory. The encryption setting (or "encryption policy") is inherited by new files and subdirectories. Encrypting existing files is not yet supported.
 
   
  +
今度は、新しい鍵を生成して鍵リングに追加します。キーリングをフラッシュする(再起動する)たびに、この手順を繰り返す必要があります:
Now generate and add a new key to your keyring. This step must be repeated every time you flush your keyring (reboot):
 
   
 
# e4crypt add_key
 
# e4crypt add_key
118行目: 118行目:
 
Added key with descriptor [f88747555a6115f5]
 
Added key with descriptor [f88747555a6115f5]
   
  +
{{Warning|パスフレーズを忘れた場合、ファイルを解読する方法はありません!パスフレーズを設定した後にパスフレーズを変更することはまだできません。}}
{{Warning|If you forget your passphrase, there will be no way to decrypt your files! It also isn't yet possible to change a passphrase after you've set it.}}
 
   
  +
{{Note|パスフレーズに対する[[Wikipedia:Dictionary_attack|辞書攻撃]]を防ぐために、ランダムな [[Wikipedia:Salt_(cryptography)|ソルト]]が自動生成され、ext4ファイルシステムのスーパーブロックに保存されます。 パスフレーズ''と''ソルトの両方は、実際の暗号化キーを導出するために使用されます。暗号化を有効にした複数のext4ファイルシステムがマウントされている場合、{{ic|e4crypt add_key}}は実際にはファイルシステムごとに1つずつ複数のキーを追加します。どんなキーもどんなファイルシステムでも使うことができますが、どのファイルシステムでもそのファイルシステム自身のソルトを使っているキーだけを使うのが賢明でしょう。そうでない場合、ファイルシステムBがアンマウントされていると、ファイルシステムAのファイルを解読することができなくなります。あるいは、{{ic|-S}}オプションを{{ic|e4crypt add_key}}に使用して自分でソルトを指定することもできます。}}
{{Note|To help prevent [[Wikipedia:Dictionary_attack|dictionary attacks]] on your passphrase, a random [[Wikipedia:Salt_(cryptography)|salt]] is automatically generated and stored in the ext4 filesystem superblock. Both the passphrase ''and'' the salt are used to derive the actual encryption key. As a consequence of this, if you have multiple ext4 filesystems with encryption enabled mounted, then {{ic|e4crypt add_key}} will actually add multiple keys, one per filesystem. Although any key can be used on any filesystem, it would be wise to only use, on a given filesystem, keys using that filesystem's salt. Otherwise, you risk being unable to decrypt files on filesystem A if filesystem B is unmounted. Alternatively, you can use the {{ic|-S}} option to {{ic|e4crypt add_key}} to specify a salt yourself.}}
 
   
  +
これであなたのキーの記述子が分かりました。 キーがセッションキーリングに含まれていることを確認します:
Now you know the descriptor for your key. Make sure the key is in your session keyring:
 
   
 
# keyctl show
 
# keyctl show
129行目: 129行目:
 
176349519 --alsw-v 1000 1000 \_ logon: ext4:f88747555a6115f5
 
176349519 --alsw-v 1000 1000 \_ logon: ext4:f88747555a6115f5
   
  +
ほとんど完了しました。次に、ディレクトリに暗号化ポリシーを設定します(キーを割り当てます)。:
Almost done. Now set an encryption policy on the directory (assign the key to it):
 
   
 
# e4crypt set_policy f88747555a6115f5 /encrypted
 
# e4crypt set_policy f88747555a6115f5 /encrypted
   
  +
以上です。キーリングにキーを追加せずにディレクトリにアクセスしようとすると、ファイル名とその内容は暗号化されたように見えます。
That is all. If you try accessing the directory without adding the key into your keyring, filenames and their contents will be seen as encrypted gibberish.
 
   
 
==Tips and tricks==
 
==Tips and tricks==

2016年11月22日 (火) 09:03時点における版

関連記事

Ext4 は Linux で一番よく使われているファイルシステム、Ext3 の発展版です。多くの点で、Ext3 から Ext4 になって Ext2 から Ext3 に進んだときよりも大きな改善がされています。Ext3 では Ext2 にジャーナリングを追加したのがほとんどでしたが、Ext4 ではファイルデータを保存するファイルシステムの重要なデータ構造にメスが入っています。その結果、改良された設計、優れたパフォーマンス、信頼性、機能性を備えたファイルシステムが誕生しました。

ソース: Ext4 - Linux Kernel Newbies

新しく ext4 ファイルシステムを作成

パーティションをフォーマットするには次を実行:

# mkfs.ext4 /dev/partition
ヒント: オプションについては mkfs.ext4 の man ページを見て下さい。/etc/mke2fs.conf を編集すればデフォルトのオプションを見たり設定できます。

デフォルトでは、mkfs.ext4 はやや低めの比率の bytes-per-inode を使って、作成される inode の定量を計算します。容量が 750GB 以上のパーティションではこれだと inode 番号が大きくなりすぎて、ディスク容量の無駄になります。比率は -i オプションで直接設定することができます。1/6291456 なら 2TB のパーティションで 476928 の inode になります。

ext3 から ext4 に移行

ext3 パーティションを変換せずに ext4 としてマウント

理由

ext4 を完全に変換する案と ext3 をそのまま使用する案の折衷案として、既存の ext3 パーティションを ext4 としてマウントする方法があります。

利点:

  • 互換性 (ext3 としてファイルシステムをマウントできます) – ext4 のサポートがないオペレーティングシステムからもファイルシステムを読み込むことが可能です (例: Windows の ext3 ドライバー)
  • パフォーマンスが向上 (ext4 パーティションに完全に変換するのよりは劣ります) – 詳しくは Ext4 - Linux Kernel Newbies を見て下さい

欠点:

  • ext4 の機能を全て活用することはできません (マルチブロックアロケーションや遅延アロケーションなどのディスクフォーマットに変更を与える機能は使えません)
ノート: ext4 が比較的新しいファイルシステムということ以外に (このこと自体をリスクと考えることもできます)、この方法を使用することで不利益になることは特にありません。

方法

  1. /etc/fstab を編集して ext4 としてマウントしたいパーティションの 'type' を ext3 から ext4 に変更してください。
  2. 変更したパーティションを再マウントします。

ext3 パーティションを ext4 に変換

理由

ext4 の能力を活かすには、非可逆の変換をする必要があります。

利点:

欠点:

  • 一方通行 (ext4 パーティションを ext3 に'ダウングレード'することはできません)

方法

以下の手順は http://ext4.wiki.kernel.org/index.php/Ext4_Howtohttps://bbs.archlinux.org/viewtopic.php?id=61602 から引用しています。

警告: エクステントなどのオプションを有効にしないかぎり ext4 は ext3 と後方互換性があります。ただし、パーティションを完全に変換しない場合、ext4 を使用する利点は少なくなります。
  1. バックアップを行なって下さい。ext4 に変換する ext3 パーティションに存在するデータを全てバックアップします。特に / (root) パーティションをバックアップする場合は、Clonezilla が役に立ちます。
  2. /etc/fstab を編集して ext4 に変換するパーティションの 'type' を ext3 から ext4 に変換してください。
  3. (必要であれば) ライブメディアを起動します。e2fsprogs で変換を行う際はドライブがマウントされていない状態になっている必要があります。ドライブの root (/) パーティションを変換するときは、他のライブメディアから起動して変換するのが一番簡単です。
  4. パーティションがマウントされていないことを確認してください
  5. tune2fs -O extent,uninit_bg,dir_index /dev/sdxX を実行 (/dev/sdxX は変換するパーティションのパスに置き換えて下さい、例: /dev/sda1)
  6. fsck -f /dev/sdxX を実行
  7. 推奨: パーティションをマウントして e4defrag -c -v /dev/sdxX を実行
  8. Arch Linux を再起動してください
ノート: The user MUST fsck the filesystem, or it will be unreadable! This fsck run is needed to return the filesystem to a consistent state. It WILL find checksum errors in the group descriptors -- this is expected. The '-f' parameter asks fsck to force checking even if the file system seems clean. The '-p' parameter asks fsck to 'automatically repair' (otherwise, the user will be asked for input for each error). You may need to run fsck -f rather than fsck -fp.
ノート: Even though the filesystem is now converted to ext4, all files that have been written before the conversion do not yet take advantage of the extent option of ext4, which will improve large file performance and reduce fragmentation and filesystem check time. In order to fully take advantage of ext4, all files would have to be rewritten on disk. Use e4defrag to take care of this problem.
警告: root (/) パーティションを変換した場合、起動しようとした時にカーネルパニックが発生することがあります。カーネルパニックが起きる場合、'fallback' の initial ramdisk を使用して再起動して、'default' の initial ramdisk を再作成してください: mkinitcpio -p linux

ファイルベースの暗号化を利用する

Linux 4.1以降、ext4はファイルベースの暗号化をサポートしています。暗号化用にマークされたディレクトリツリーでは、ファイルの内容、ファイル名、およびシンボリックリンクのターゲットはすべて暗号化されます。暗号化キーはカーネルキーリングに格納されます。機能の詳細、実装状態の概要、実用的な点、カーネル4.1でのテスト結果については、Quarkslabのブログの項目も参照してください。

CONFIG_EXT4_ENCRYPTIONオプションが有効になっているカーネルを使用していて、e2fsprogsパッケージが少なくともバージョン1.43以上であることを確認してください。

次に、ファイルシステムが暗号化にサポートしているブロックサイズを使用していることを確認します:

# tune2fs -l /dev/device | grep 'Block size'
Block size:               4096
# getconf PAGE_SIZE
4096

これらの値が同じでない場合、ファイルシステムは暗号化をサポートしないので絶対にこれ以上先には進まないでください

次に、ファイルシステムの暗号化機能フラグを有効にします:

# tune2fs -O encrypt /dev/device
警告: 暗号化機能フラグを有効にすると、4.1より古いカーネルはファイルシステムをマウントできなくなります。

次に、暗号化するディレクトリを作成します:

# mkdir /encrypted

暗号化は空のディレクトリにしか適用できないことに注意してください。暗号化設定(または「暗号化ポリシー」)は、新しいファイルとサブディレクトリによって継承されます。既存のファイルの暗号化はまだサポートされていません。

今度は、新しい鍵を生成して鍵リングに追加します。キーリングをフラッシュする(再起動する)たびに、この手順を繰り返す必要があります:

# e4crypt add_key
Enter passphrase (echo disabled): 
Added key with descriptor [f88747555a6115f5]
警告: パスフレーズを忘れた場合、ファイルを解読する方法はありません!パスフレーズを設定した後にパスフレーズを変更することはまだできません。
ノート: パスフレーズに対する辞書攻撃を防ぐために、ランダムな ソルトが自動生成され、ext4ファイルシステムのスーパーブロックに保存されます。 パスフレーズソルトの両方は、実際の暗号化キーを導出するために使用されます。暗号化を有効にした複数のext4ファイルシステムがマウントされている場合、e4crypt add_keyは実際にはファイルシステムごとに1つずつ複数のキーを追加します。どんなキーもどんなファイルシステムでも使うことができますが、どのファイルシステムでもそのファイルシステム自身のソルトを使っているキーだけを使うのが賢明でしょう。そうでない場合、ファイルシステムBがアンマウントされていると、ファイルシステムAのファイルを解読することができなくなります。あるいは、-Sオプションをe4crypt add_keyに使用して自分でソルトを指定することもできます。

これであなたのキーの記述子が分かりました。 キーがセッションキーリングに含まれていることを確認します:

# keyctl show
Session Keyring
1021618178 --alswrv   1000  1000  keyring: _ses
 176349519 --alsw-v   1000  1000   \_ logon: ext4:f88747555a6115f5

ほとんど完了しました。次に、ディレクトリに暗号化ポリシーを設定します(キーを割り当てます)。:

# e4crypt set_policy f88747555a6115f5 /encrypted

以上です。キーリングにキーを追加せずにディレクトリにアクセスしようとすると、ファイル名とその内容は暗号化されたように見えます。

Tips and tricks

予約ブロックの削除

デフォルトでは、ファイルシステムの 5% はフラグメントが起こらないように root ユーザーに予約されます。最近の大容量ディスクでは、パーティションを長期保存アーカイブとして使う場合、5%は必要以上に大きい値となります (詳しくは このメール を見て下さい)。パーティションが以下の条件を満たしているならば、ディスク容量を増やすために予約ブロックの割合を減らしても大抵は問題ありません:

  • パーティションがとても大きい (例えば 50GB 以上)
  • 長期保存用のアーカイブとして使っている、頻繁にファイルを作成したり削除することがない

予約ブロックを削減するには tune2fs ユーティリティを使います。次のコマンドは /dev/sdXY パーティションの予約ブロックの割合を 1.0% に設定します:

# tune2fs -m 1.0 /dev/sdXY

findmnt(8) を使うことでデバイスの名前を確認できます:

$ findmnt /the/mount/point

E4rat

E4rat は ext4 ファイルシステム用に作られたプリロードアプリケーションです。E4rat は起動時に開かれるファイルを記録して、アクセス時間が短縮されるようにパーティションにおけるファイルの配置を最適化します。そして起動時の初期段階でファイルを先読みします。E4ratSSD を使っている場合は効果がありません。SSD のアクセス時間はハードディスクと比べると無視できるほどしかないためです。

トラブルシューティング

バリアとパフォーマンス

カーネル 2.6.30 から、データの整合性を確保するのに役立つ変更によって ext4 のパフォーマンスは落ちています [1]

多くのファイルシステム (XFS, ext3, ext4, reiserfs) では、fsync やトランザクションコミットの際に書き込みバリアと呼ばれるものをディスクに送信します。書き込みバリアは書き込みの順序を守らせるための仕組みで (いくらか性能面への影響があります)、ディスクの書き込みキャッシュを安全に利用できるようにするためのものです。お使いのディスクにバッテリーが搭載されているような場合は、バリアを無効化することで性能を改善できる場合があります。

書き込みバリアの送信は、マウントオプションに barrier=0 (ext3, ext4, reiserfs の場合) や nobarrier (XFS) を設定することで無効化できます [2]

警告: バリアを無効化すると、電源が失われたときにキャッシュが正しく書き込まれるか保証がされなくなります。これによってファイルシステムの破壊やデータ損失が発生する場合があります。

バリアをオフにしたいときは /etc/fstab の変更したいファイルシステムに barrier=0 オプションを追加してください。例:

/etc/fstab
/dev/sda5    /    ext4    noatime,barrier=0    0    1

参照