그렇다면 시간이 많이 걸릴 것입니다(소스 파일이 큰 경우 ) mount --bind
/a
. 이는 단순히 파일 시스템의 파일 테이블을 업데이트하는 것이 아니라 실제로 파일을 복사한 다음 소스 파일을 삭제합니다./b
mv /a/bigfile /b/
나는 그것이 어떻게 그리고 왜 mount --bind
작동하는지 이해합니다. 다른 사람들이 지적했듯이 이에 대한 몇 가지 좋은 설명이 있습니다.
mount --bind
실제로 파일 시스템의 파일 테이블을 업데이트하여 이러한 작업(이동)을 수행할 수 있도록 mount a가 동일한 파일 시스템에 있도록 지시할 수 있는 방법이 있습니까 ?
저는 이 문제를 이해하는 방법이 아니라 어떻게 해결하는지 묻고 있습니다. 제가 모르는 커널 패치가 이미 사용 가능하거나 아직 찾지 못한 누락된 매개변수가 있을 수도 있습니다.
이유: 현재 설정에는 .symlink만 지원하는 서비스(nextcloud)가 하나 있습니다 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
바인드 마운트란 무엇입니까?