내가 mount --bind
/a
들어가면 시간이 많이 걸릴 것입니다 (소스 파일이 큰 경우) /b
. mv /a/bigfile /b/
이는 단순히 파일 시스템의 파일 테이블을 업데이트하는 대신 실제로 파일을 복사한 다음 소스 파일을 삭제합니다.
나는 어떻게 그리고 왜 mount --bind
작동하는지 이해합니다. 다른 사람들이 지적했듯이 이에 대한 좋은 설명이 있습니다.
mount --bind
a가 동일한 파일 시스템에 있음을 마운트에 알리고 이와 같은 작업(이동)이 실제로 파일 시스템의 파일 테이블을 업데이트하여 수행되도록 하는 방법이 있습니까 ?
나는 이 문제를 이해하는 방법이 아니라 어떻게 해결하는지 묻고 있습니다. 이미 사용 가능한 커널 패치가 있을 수 있지만 내가 알지 못하는 것일 수도 있고, 내가 아직 찾지 못한 매개변수가 누락된 것일 수도 있습니다(등).
이유: 현재 설정에는 mount --bind
. 심볼릭 링크를 사용할 수 없습니다. 예를 들어 nextcloud의 각 계정 내에 공유 폴더가 있어야 한다면 바인드가 있어야 합니다. 파일 시스템/커널 수준에서 만들어진 경우 nextcloud와 함께 작동하는 모든 솔루션을 수용할 수 있습니다. 이는 현재 설정에 SSH와 같은 다른 방법으로 이러한 파일에 대한 액세스도 포함되어 있기 때문입니다. 즉, 임의의 명령이나 응용 프로그램을 사용하여 예제와 같이 파일을 이동할 수 있기를 바랍니다.
답변1
분명히 그렇지 않습니다.매뉴얼 페이지rename(2)
다음과 같이 언급합니다.
EXDEV
이전 경로그리고새로운 경로동일한 마운트된 파일 시스템에 있지 않습니다. (Linux에서는 파일 시스템을 여러 지점에 마운트하는 것을 허용하지만rename()
동일한 파일 시스템이 두 지점 모두에 마운트되더라도 다른 마운트 지점에서는 작동하지 않습니다.
제가 정확하게 기억한다면 바인드 마운트는 동일한 파일 시스템을 여러 번 마운트하는 것과 동일합니다. 즉, 바인드에 대한 "소스"와 "타겟"이 없다는 것입니다.
또 다른 것도 있어요답변몇 달 전 같은 주제에 대한 또 다른 질문입니다. 여기에는 커널 개발자와의 논의에 대한 포인터가 있습니다. 그러니 찬성 투표하세요.
답변2
Docker 컨테이너의 nextcloud 및 samba와 동일한 문제가 있습니다. 모든 데이터를 nextcloud 내부로 이동하고 다른 사람들이 이 볼륨에서 바인딩하여 마운트하도록 하여 문제를 해결했습니다.
따라서 모든 서비스 관점에서 mv는 항상 하나의 바인드 마운트 내에 있습니다.
그래도 이것이 도움이 될지 확실하지 않습니다
답변3
rsync
대신 사용하면 mv
문제가 해결됩니다. 다음 명령을 사용해보십시오
rsync -avP /a/bigfile /b/bigfile
문제는 의 관점이 mount --bind
커널에 있고 mv
. mv
와 달리 rsync
파일의 수정된 부분만 이동합니다.
이에 대해 설명합니다mount --bind
바인드 마운트란 무엇입니까?