2番目の(NTFS)ドライブで実行可能ファイルを実行しようとすると、分割エラーが発生します。私のホームフォルダから同じ実行ファイルを実行すると正常に動作します。
例:次のコマンドを使用して、次のCプログラムをコンパイルしますgcc a.c
。
#include <stdio.h>
int main() {
puts("Hello");
return 0;
}
次に、./a.out
2番目のドライブで実行します。
$ ./a.out
zsh: segmentation fault ./a.out
(有効になっており、他の目的で使用可能な場合でもコアダンプは生成されません。)
/home/username/
変更せずに同じファイルをたとえば(マイメイン/OSドライブに)コピーする場合:
$ ./a.out
Hello
そこではすべてがうまくいきます。
ただし、2番目のドライブでは、起動中にGDBが失敗します。
(gdb) starti
Starting program: /path/to/a.out
During startup program terminated with signal SIGSEGV, Segmentation fault.
以下を使用すると失敗したとstrace
表示されます。execve
$ strace ./a.out
execve("./a.out", ["./a.out"], 0x7ffd0aa31070 /* 83 vars */) = -1 EOPNOTSUPP (Operation not supported)
+++ killed by SIGSEGV +++
zsh: segmentation fault (core dumped) strace ./a.out
また、2番目のドライブでもldd
言います。非常にうまく動作します。not a dynamic executable
readelf -d
objdump -p
マイドライブとそのサブフォルダのいずれかが次のようにマウントされます/etc/fstab
。
UUID=drive-uuid-123 /path/to/drive ntfs3 defaults 0 2
/path/to/drive/some/path /my/new/path none defaults,bind 0 2
他の NTFS ドライブでバイナリを実行すると、同じ問題が発生します。
システムメッセージ:
$ uname -a
Linux thomas-manjaro 6.6.25-1-MANJARO #1 SMP PREEMPT_DYNAMIC Thu Apr 4 20:32:38 UTC 2024 x86_64 GNU/Linux
これはManjaroを新しくインストールしたもので、すべてのパッケージが最新です。
何が問題なのかご存知ですか?ドライブを別々にマウントする必要がありますか?一種のシステム変数を設定する必要がありますか?
答え1
ノート:一行に2つずつ浮かせて作成し、fstab
下段の完成した部分にはできるだけ間隔をあけました。fstab
実際に使用する位置に合わせてマウントポイントを自由に変更してください。
確認する
- 取付ける:
sudo pacman -S ntfs-3g fuse
- テストインストール:
sudo mkdir -p /mnt/ntfs && sudo mount -t ntfs /dev/sdX /mnt/ntfs
-Xが何であるかを確認するには、テスト用にのみpartedを使用してください。まもなくUUIDを追加する予定です。 - ステップ2のマウントが正しく取り付けられていることをテストします。
mount | grep ntfs
fstab アセンブル
- UUIDを書き留めます。
sudo blkid /dev/sdX
-上記のステップ2を参照してください。 - fstabに追加:
UUID=XXXX-XXXX /mnt/ntfs ntfs user,ro,umask=0222,defaults 0 0
- この「デフォルトマウント」はカーネルのファイルシステムハンドラによって処理されます。
これにより、ルートを必要とせずにドライブ全体を読み取り専用でマウントし、Linuxアクセスマスクと一致する必要があります。 fstabと同様に、読み取り/書き込みディレクトリを追加/マウントできるようになりました。FUSEファイルシステム):/mnt/ntfs/path/to/directory /some/new/path ntfs-3g rbind,user,umask=0222,defaults 0 0
- この「サブインストール」はユーザースペースツールによって処理されます。
ノート2:rbind
ここでは、インストールの一部の実行中に変更を再帰的に維持するために使用されます。フル読み取り専用ファイルシステムが別のファイルシステムにマウントされました。読み書き。変更をディスクに正しく保存するには、両方のインストールを同期状態に保つ必要があります。望むより:バインドマウントについて学ぶ、再帰バインディングの説明が含まれています。
fstab 完了
#Device#MountPoint#FS #MountOptions#Fsck UUID=XXXX-XXXX /mnt/ntfs ntfs ユーザー,ro,umask=0222,デフォルト 0 0 /mnt/ntfs/special/dir /some/new/path ntfs-3g rbind, ユーザー, umask=0222, デフォルト 0 0
答え2
私はデュアルブートシステムを維持していますが、何年もWindowsを起動していません。内部および外部(USB)ハードドライブの両方に古いファイルがたくさんあります。両方ともLinux ext2 / ext3とNTFSパーティションがあります。
デフォルトでは、NTFSを永久にマウントしないことを選択したため(USBは取り外し可能であるため)、エントリはありませんfstab
。私は通常、Linuxファイルマネージャを使用して必要に応じてパーティションをマウントします。これは次のような特性を提供します。
$ mount | grep Windows
/dev/sda2 on /media/paul/Windows type fuseblk \
(rw,nosuid,nodev,relatime,user_id=0,group_id=0, \
default_permissions,allow_other, \
blksize=4096,uhelper=udisks2)
バックアップスクリプトと同じ場合は、次のコマンドが含まれます。
mount -o uid=1000,gid=1000 "/dev/sda2" "/media/root/Windows"
このudisksctl
コマンドも便利です。