
하나의 파일 시스템에 서로 하드 링크된 폴더 모음이 있습니다(내용은 동일함).
폴더 중 하나를 다른 디스크의 다른 파일 시스템으로 이동하면 어떻게 되나요?
저는 Mac OSX Snow Leopard를 사용하고 있으며 명령줄 명령을 사용하고 있습니다 mv
.
답변1
아니요, 기본값은 mv
그렇습니다.~ 아니다하드링크 보존:
~$ 어느 MV /bin/mv ~$ uname -a Darwin mini.local 13.4.0 Darwin 커널 버전 13.4.0: 8월 17일 일요일 19:50:11 PDT 2014; 루트:xnu-2422.115.4~1/RELEASE_X86_64 x86_64 ~$ cd /볼륨/백업\ 기본/ 백업 Primary$ mkdir 테스트 백업 기본$ CD 테스트/ 테스트$ 에코 foo > a 테스트$ ln ab 테스트$ ls -li ab 14271856 -rw-r--r-- 사용자 직원 2명 4 10월 15일 19:23 a 14271856 -rw-r--r-- 사용자 직원 2명 4 10월 15일 19:23 b 테스트$ CD .. 백업 기본$ mv 테스트 ../백업\ 보조/ 기본 백업$ ls -li ../Backup\ 보조/테스트/ 총 32개 11040478 -rw-r--r-- 사용자 직원 1명 4 10월 15일 19:23 a 11040479 -rw-r--r-- 사용자 직원 1명 4 10월 15일 19:23 b
답변2
메모
서로 하드 링크된 하나의 파일 시스템에 있는 폴더
보통 유닉스에서는디렉토리를 함께 하드링크하는 것은 지원되지 않습니다.. "한 디렉토리의 파일은 다른 디렉토리의 파일에 대한 하드링크입니다"라는 뜻이라고 가정합니다.
mv
행동
서로 하드링크된 많은 파일이 있다고 가정해 보겠습니다. 즉, 파일 시스템 내에 한 번 저장된 동일한 데이터로 연결되는 많은 경로가 있습니다.
비교하다이 Unix 및 Linux SE 답변. 관련 부분:
파일 시스템 간 이동(동일한 물리적 매체에 있는지 여부는 중요하지 않음)은 파일 복사 후 삭제로 처리됩니다. 실제로 이것이 바로
mv
명령이 수행하는 작업입니다. 분명히 이는 대상 파일 시스템이 파일의 새 복사본을 만들어야 함을 의미합니다.
복사본이 만들어진 후 mv
와 유사하게 소스를 제거합니다 rm
.이것적용됩니다:
rm
단순히 포인터를 삭제합니다. 파일에 대한 여러 포인터(하드 링크)가 있는 경우 해당 포인터 중 하나를 삭제하면rm
다른 포인터는 완전히 변경되지 않고 데이터를 계속 사용할 수 있습니다.
따라서 하드링크된 파일 중 일부를 다른 파일 시스템으로 이동하면다른 하드링크는 안전할 것입니다. 하드링크는 파일 시스템을 교차할 수 없으므로 새 복사본은 소스 파일 시스템에 남아 있는 모든 항목에 대한 하드링크가 될 수 없습니다.
하드링크된 파일을 모두 이동하면 소스 파일 시스템에서 모두 사라지고 대상 파일 시스템에 나타납니다. 단일 파일 mv
(여러 파일 이동)이라도 모든 새 파일을 개별적으로 생성한다는 점에 유의하세요.더이상서로 하드링크되어야 합니다. 이론적으로 mv
하드링크를 감지하고 대상 파일 시스템에서 다시 생성하기 위해 몇 가지 추가 작업을 수행할 수 있지만 그렇지 않습니다(그림 참조).이건 또 다른 대답이야).
하드링크를 얻기 위해 하드링크 이동
하드링크를 다시 생성하는 다른 도구가 그 중 하나입니다( Mac OS X에서 확실히 가능한지 tar
는 알 수 없지만 ). tar
비교하다이것:
기본적으로
tar
하드 링크가 있는 파일을 보관하도록 지시하고 보관할 파일에 해당 링크가 두 개 이상 포함되어 있으면 파일을 한 번만 보관하고 두 번째 파일(및 추가 이름)을 하드 링크로 기록합니다. 이는 해당 아카이브를 추출하면 하드 링크가 복원된다는 의미입니다.
하드링크는 복원된 파일 간에 복원되지만(즉, 소스의 하드링크 연결을 모방함) 복원된 파일은 소스 파일(또는 여전히 존재할 수 있는 하드링크)에 다시 하드링크되지 않습니다. 동일한 파일 시스템으로 추출 tar
되었습니다.
tar
대규모 아카이브를 생성하지 않고 이점을 활용하려면 몇 가지 쉘 트릭이 필요합니다. 예:
tar -c /source/dirA/ /source/file1 | { cd /foo/destination/ && tar -x; }
이 명령은 삭제하지 않고 복사를 수행합니다. 소스를 삭제해야 한다면 결국 별도의 명령어로 삭제하세요.