두 번째(NTFS) 드라이브에서 실행 파일을 실행하려고 하면 분할 오류가 발생합니다. 내 홈 폴더에서 똑같은 실행 파일을 실행하면 제대로 작동합니다.
예: 다음 명령을 사용하여 다음 C 프로그램을 컴파일합니다 gcc a.c
.
#include <stdio.h>
int main() {
puts("Hello");
return 0;
}
이제 ./a.out
두 번째 드라이브에서 실행합니다.
$ ./a.out
zsh: segmentation fault ./a.out
(활성화되어 다른 목적으로 사용 가능한 경우에도 코어 덤프가 생성되지 않습니다.)
/home/username/
수정 없이 동일한 파일을 예를 들어 (내 메인/OS 드라이브에) 복사하는 경우 :
$ ./a.out
Hello
거기에서는 모든 것이 잘 작동합니다.
그러나 두 번째 드라이브에서는 시작 중에 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
또한 두 번째 드라이브에서도 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
명령도 유용합니다.