NTFS
NTFS (New Technology File System) は、Windows および Windows ベースのオペレーティングシステムのための、Microsoft によるプロプライエタリなディスクファイルシステムです。
Linux の使用時に NTFS サポートを実現する主要な方法は、2 通りあります。Linux カーネル 5.15 は、圧縮機能も含む NTFS ファイルシステムの完全なサポートを備えた、新しいドライバ NTFSv3 を提供しています。NTFS-3G という FUSE ファイルシステムドライバもあります - 低速ですが、より安定していて、長くテストされてきた方法です。
インストール
カーネル
Linux カーネル 5.15 より前は、主流だった古い NTFS カーネルドライバは NTFS のうち非常に限られた機能のみをサポートしていました。カーネルコンフィグの情報では、サポートを「部分的だが安全」としています。古いドライバは既存のファイルを上書きすることはできましたが、ファイルやディレクトリの作成、削除、名前の変更を行うことができません。Linux 5.15 現在、古い NTFS コードは、 "NTFSv3" と呼ばれる新しい Paragon のカーネル内 NTFS ドライバによって置き換えられました。このドライバのほうがより多機能で、完全な読み書きと圧縮機能をサポートしています。
5.15 より前のカーネルを実行しているシステムで NTFS を使用する場合は FUSE を利用した NTFS-3G 実装を有効化するのがよいでしょう。
ネイティブサポート
Linux 5.15 以降、新しい NTFSv3 ドライバを使用するには次のカーネルオプションを有効化する必要があります:
File systems ---> DOS/FAT/NT Filesystems ---> <*> NTFS Read-Write file system support Search for <code>CONFIG_NTFS3_FS</code> to find this item. <*> activate support of external compressions lzx/xpress Search for <code>CONFIG_NTFS3_LZX_XPRESS</code> to find this item.
NTFS-3G (FUSE 実装)
5.15 より前の Linux で、FUSE 上での NTFS 読み書きを可能にするには、次のカーネルオプションを有効化する必要があります:
File systems --->
<*> FUSE (Filesystem in Userspace) support Search for <code>CONFIG_FUSE_FS</code> to find this item.
sys-fs/ntfs3g パッケージも必要です (下の emerge の節を参照してください)。
Emerge
NTFS-3G
このパッケージは NTFS-3G を使用する場合にのみ必要です。ネイティブサポートを使用する場合には必要ありません!
NTFS-3G は FUSE ベースのファイルシステムなので、ユーザ空間ユーティリティが必要です。FUSE は Filesystem in Userspace の略で、カーネル空間のファイルシステムドライバと比較すると、例えばパフォーマンスに劣るなど、いくつかの不利な点があります。
"read only filesystem" エラーに遭遇した場合は、suid
USE フラグを有効化する必要があるかもしれません。
USE flags for sys-fs/ntfs3g Open source read-write NTFS driver that runs under FUSE
+fuse
|
Enable ntfs-3g FUSE driver |
+mount-ntfs
|
Install mount.ntfs symlink |
+ntfsprogs
|
Enable ntfsprogs |
acl
|
Add support for Access Control Lists |
debug
|
Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces |
ntfsdecrypt
|
Build and install the ntfsdecrypt application. |
static-libs
|
Build static versions of dynamic libraries as well |
suid
|
Enable setuid root program(s) |
xattr
|
Add support for extended attributes (filesystem-stored metadata) |
USE フラグを再確認し、必要に応じて修正を加えたら、FUSE ユーザ空間ツールをインストールしてください。これにより NTFS ファイルシステムの操作が可能になるでしょう:
root #
emerge --ask sys-fs/ntfs3g
使い方
作成
mkfs.ntfs コマンドはフォーマットするよう指示されたパーティションの内容を不可逆的に破壊します。このコマンドを実行する前に、正しいパーティションを選択しているか必ず確認してください!
NTFS ファイルシステムを /dev/sda1 パーティション上に作成するには (ntfsprogs
USE フラグが必要です):
root #
mkfs.ntfs /dev/sdyX
/dev/sdyX は実際にフォーマットするパーティションに置き換えてください。
マウント
NTFS ファイルシステムをマウントする方法は複数あります:
- mount - 手動マウント。
- fstab - 起動時の自動マウント。
- removable media - 必要に応じた自動マウント。
- AutoFS - アクセス時の自動マウント。
ネイティブサポート
Linux カーネル 5.15 以降に含まれるネイティブ NTFS3 ドライバを使用して:
root #
mount -t ntfs3 /dev/device /path/to/mountpoint
mount /dev/device /path/to/mountpoint では、
ntfs3
ドライバがロードされている場合でも実行に失敗するかもしれません。一因として、/etc/filesystems に ntfs3
の行が存在しないことが考えられます。この行が存在することがプリセットとして望ましいのかもしれませんが、この場合は単に -t ntfs3
付きでコマンドを実行するようにしてください。FUSE (NTFS-3G)
ntfs3g パッケージが提供する、読み書き可能なドライバを使用して:
root #
mount -t ntfs-3g /dev/device /path/to/mountpoint
BitLocker
関連項目: UEFI Dual boot with Windows 7/8、BitLocker のセクション。
Linux dm-crypt は、(Windows Vista などの) 非常に古い版に対するものは除きますが、BitLocker および BitLocker to Go のネイティブサポートを備えています。cryptsetup は BitLocker ヘッダ bitlk
を読むことができます。主な必要条件は、使用中の暗号化アルゴリズムに対するサポートを Linux カーネルが持たなくてはならないということです。
dm-crypt に関するさらなる詳細については、対応する man ページを参照してください:
cryptsetup (8)
、crypttab (5)
Linux 上で BitLocker 暗号化された Windows ファイルシステムを使用するための最初の手順は、Microsoft Windows 内でそのボリュームのための BitLocker 回復キーを得ることです。回復キーの例です:
001122-334455-667788-990011-223344-556677-890123-456789
一意な BitLocker 回復キーを得る方法については、Microsoft のサポートインフラストラクチャを参照してください。これを書いている時点で、次のサポート web ページが Windows 10 および 11 のためのプロセスを説明しています: BitLocker 回復キーを見つける。
Linux 上では、cryptsetup は /etc/crypttab 内で構成されているボリュームを自動的に復号することができます。systemd プロファイル を使用している場合の永続的な構成方法 (スタートアップ時の自動 BitLocker 復号) については、sys-fs/cryptsetup の設定を参照してください。
まず、ファイル内に回復キーを保存してください。暗号化鍵を保存するのに都合がいい場所としては、/etc/cryptsetup-keys.d などが一例でしょう。上の例のように、Windows の BitLocker ボリューム ID が 00112233-4455-6677-8899-AABBCCDDEEFF
だとすると、/etc/cryptsetup-keys.d/00112233-4455-6677-8899-AABBCCDDEEFF.key を作成するといいかもしれません。
root #
mkdir /etc/cryptsetup-keys.d
root #
echo 001122-334455-667788-990011-223344-556677-890123-456789 > /etc/cryptsetup-keys.d/00112233-4455-6677-8899-AABBCCDDEEFF.key
他のあらゆる暗号化鍵と同様に、キーへのアクセス権限の付与は最大限の注意を払うことが推奨されます。BitLocker キーは暗号化されずに平文で保存されるので、キーを含むファイルへのアクセスは制限されるべきです:
root #
chmod 444 /etc/cryptsetup-keys.d/*.*
次に、BitLocker パーティションの識別子を見つけてください。これは、UUID
または LABEL
など、Linux によってサポートされているものなら何でも構いません。以下の例は、gdisk (または parted も使用できます) および lsblk によって特定されたパーティション UUID を使用します:
root #
gdisk -l /dev/nvme0n1
GPT fdisk (gdisk) version 1.0.9 Partition table scan: MBR: protective BSD: not present APM: not present GPT: present Found valid GPT with protective MBR; using GPT. Disk /dev/nvme0n1: 3907029168 sectors, 1.8 TiB Model: SSD0000SSD2G Sector size (logical/physical): 512/512 bytes Disk identifier (GUID): FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF Partition table holds up to 128 entries Main partition table begins at sector 2 and ends at sector 33 First usable sector is 34, last usable sector is 3907029134 Partitions will be aligned on 2048-sector boundaries Total free space is 4205 sectors (2.1 MiB) Number Start (sector) End (sector) Size Code Name 1 2048 534527 260.0 MiB EF00 EFI system partition 2 534528 567295 16.0 MiB 0C01 Microsoft reserved 3 567296 3902930943 1.8 TiB 0700 Windows boot partition 4 3902932992 3907028991 2.0 GiB 2700 Windows RE
root #
lsblk -o +PARTUUID
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS PARTUUID nvme0n1 259:0 0 1,8T 0 disk ├─nvme0n1p1 259:1 0 260M 0 part 00000000-0000-0000-0000-000000000000 ├─nvme0n1p2 259:2 0 16M 0 part 00000000-1111-0000-0000-000000000000 ├─nvme0n1p3 259:3 0 1,8T 0 part 00112233-aabb-4455-ccdd-66778899eeff └─nvme0n1p4 259:4 0 2G 0 part 00000000-2222-0000-0000-000000000000
上の例では、Windows パーティションがパーティション番号 3 の /dev/nvme0n1p3 であることと、そのパーティション UUID (PARTUUID
) が 00112233-aabb-4455-ccdd-66778899eeff
であることが分かります。このパーティション UUID は Windows 上で BitLocker によって与えられるボリューム UUID とは異なります。
そして /etc/crypttab に、平文フォーマットでキーを保持する、回復キーファイルを記載してください:
windows_bitlk PARTUUID=00112233-aabb-4455-ccdd-66778899eeff /etc/cryptsetup-keys.d/00112233-4455-6677-8899-AABBCCDDEEFF.key bitlk,discard,nofail
PARTUUID=00112233-aabb-4455-ccdd-66778899eeff
のようなパーティション UUID の代わりに、/dev/nvme0n1p3
のようなデバイスパスを直接使用しても機能するでしょうが、デバイス番号が変わるなどの、システム構成に対する修正の種類によっては、様々な構成ファイルを更新する必要があるというデメリットがあります: SSD が移動されたり、SSD が追加されたりすると、nvme0n1
は nvme1n1
になることがあります。さらに、上の例での windows_bitlk
のように、マッパーデバイスのために異なる名前を選ぶこともできます。BitLocker 回復キーを含むファイルの名前も、Windows によって割り当てられた BitLocker UUID ではなく、Windows-BitLocker-volume.key または Additional-Data-Volume-BitLocker.key のように、目的に応じてファイル名を設定することができます。例の中の指定を、システムで実際に使用されるものに変更してください。/etc/crypttab について、お好みでオプションを追加/削除しても構いません。例えば nofail
オプションは、何らかの理由で BitLocker ボリュームが利用できない場合、systemd スタートアップエラーを防止します。これなしでは、システムブートアップは BitLocker 復号に失敗する場合、systemd レスキューシェルのみへのアクセスを与えて停止するでしょう。
BitLocker 暗号化された NTFS パーティションを自動的にマウントするためには、/etc/fstab も設定しなくてはなりません。NTFS パーティションは復号済みの cryptsetup 名、例えば /dev/mapper/windows_bitlk を指定しなくてはなりません。一例としては以下のようになるでしょう:
/dev/mapper/windows_bitlk /mnt/windows ntfs3 noatime,discard,sys_immutable,showmeta,acl,hidden,hide_dot_files,nofail 0 0
/etc/crypttab と同様に /etc/fstab でも nofail
オプションを使用して、何らかの理由で BitLocker 復号が失敗したか、NTFS パーティションがたまたま汚い状態になっていた場合に、エラーとなることを防ぐことができます。つまり、ファイルシステムの破損を防ぐために NTFS パーティションはマウントされなくなるでしょうが、同時に systemd によるスタートアップが失敗することもなくなるでしょう。
次の再起動後に、Windows NTFS パーティションは復号され、マウントされるはずです。しかし再起動しなくても、実行中のシステムで BitLocker ボリュームを復号することができます:
root #
cryptsetup open --type bitlk --allow-discards --key-file /etc/cryptsetup-keys.d/00112233-4455-6677-8899-AABBCCDDEEFF.key /dev/nvme0n1p3 windows_bitlk
root #
mount /mnt/windows
その後、NTFS に対するすべての操作を通常の (暗号化されていない) ボリュームと同じように始めることができます:
root #
umount /mnt/windows
root #
ntfsfix -n /dev/mapper/windows_bitlk
Mounting volume... OK Processing of $MFT and $MFTMirr completed successfully. Checking the alternate boot sector... OK NTFS volume version is 3.1. NTFS partition /dev/mapper/windows_bitlk was processed successfully.
トラブルシューティング
NTFS-3G
Windows がハイバネートした後の NTFS パーティションを強制的にマウントする
Windows によって管理されている NTFS ファイルシステムは、システム起動時間を節約するために、完全にシャットダウンされるのではなくハイバネートされることがあります。これが発生していると、hiberfil.sys ファイルを削除しない限り、その NTFS パーティションをマウントすることはできないでしょう。ハイバネートされたパーティションを強制的にマウントするためには、次のコマンドを使用することができます。これを行うと hiberfile が削除されるので、ファイル内のすべてのデータは失われます。Windows が動作を再開するためには、クリーンブートする必要があるでしょう。
root #
mount -t ntfs-3g -o remove_hiberfile /path/to/device /path/to/mountpoint
Windows システム側では、Windows の不完全なシャットダウンが発生するのを防ぐために、管理者コマンドプロンプトから powercfg /h off を実行することができます。これはハイバネーションを無効化し、おそらく Windows をブートするときのブート時間が増加するでしょうが、ドライブが完全にアンマウントされるメリットがあります。
Windows 10 システムで、ハイバネーションを防止するための管理者権限が取得できない場合、次の回避策を試してみてください:
- Windows をブートし、Windows ログイン画面を表示します。
- 電源ボタン (右下隅) をクリックして、shift キーを押しながら再起動をクリックします。
- 詳細オプションを選択し、UEFI ファームウェアの設定を選択して再起動します。
- UEFI ファームウェアに入ったら、Linux のための適切なブートエントリを選択します。
ntfsfix
NTFS でフォーマットされたパーティションを、Linux システムから修復する必要がある場合があるかもしれません。ntfsfix はこの作業を行うためのツールです:
root #
ntfsfix /dev/nvme0n1p3
Mounting volume... $MFTMirr does not match $MFT (record 3). FAILED Attempting to correct errors... Processing $MFT and $MFTMirr... Reading $MFT... OK Reading $MFTMirr... OK Comparing $MFTMirr to $MFT... FAILED Correcting differences in $MFTMirr record 3...OK Processing of $MFT and $MFTMirr completed successfully. Setting required flags on partition... OK Going to empty the journal ($LogFile)... OK Checking the alternate boot sector... OK NTFS volume version is 3.1. NTFS partition /dev/nvme0n1p3 was processed successfully.
関連項目
- FAT — 当初は MS-DOS (および後の NT 以前の Microsoft Windows) で使用するために作られたファイルシステム。
- Dislocker — FUSE-based filesystem driver capable of reading NTFS BitLocker encrypted partitions.
- UEFI Dual boot with Windows 7/8 — describes how to dual boot Microsoft Windows on a UEFI computer.
外部資料
- NTFS at Microsoft's TechNet
- Linux kernel NTFS filesystem documentation
- Linux kernel NTFS3 filesystem documentation