SSH(Putty 클라이언트)를 통해 연결하는 원격 Debian 테스트 서버가 있습니다. 원격 컴퓨터에 있는 많은 파일을 다른 폴더로 이동하고 싶습니다.
remote: /mnt/a/ -> remote: /mnt/b/c/
RESULT@remote: /mnt/b/c/a/
move(mv) 명령을 사용하여 SSH를 통해 로컬 컴퓨터에서 원격 컴퓨터로 연결합니다.
mv /mnt/a/ /mnt/b/c/
이 작업을 하려면 약 700MB의 데이터(약 5개 파일)를 사용했는데, 파일을 복사하는 데 시간이 오래 걸렸습니다.
mv 명령은 SSH를 통해 내 로컬 컴퓨터로 파일을 전송한 다음 서버의 다른 폴더로 다시 보내나요? 그렇다면 원격 서버에서 로컬로 파일을 이동하는 데 사용할 수 있는 다른 명령이 있습니까?
답변1
원본 및 대상 경로가 동일한 파일 시스템에 있는 한 mv
실제로 "이동"되는 것은 없습니다. 디렉터리와 파일의 메타데이터(inode 및 링크)만 편집할 뿐 데이터 블록 자체는 이동하지 않습니다. 예를 들어, /home
과 가 /srv
서로 다른 파일 시스템에 있다고 가정하면 다음과 같은 결과가 나타납니다.
$ mv /home/bigfile.txt /home/mydir/ # Instant.
$ mv /home/bigfile.txt /srv # Takes time.
한 파일 시스템에서 다른 파일 시스템으로 모든 데이터를 이동하려면 한 디스크 섹션에서 다른 디스크 섹션으로 물리적으로 복사해야 합니다. 데이터 블록을 이동해야 하는데 시간이 걸릴 수 있습니다(솔직히 많은 작업을 수행할 수는 없습니다). 사물의).
SSH를 통해 이 작업을 수행해도 아무 것도 변경되지 않습니다. SSH는 Secure Shell의 약자로 컴퓨터를 모든 것에 대한 릴레이로 사용하는 대신 실제 원격 셸을 사용한다는 의미입니다. SSH를 통해 원격 시스템에서 요청하는 모든 것은 원격으로 처리됩니다.
답변2
SSH 세션을 통해 파일을 보다 강력하게 이동하려면 screen(또는 tmux 또는 이와 유사한 것)을 사용하는 것이 좋습니다. 그렇지 않으면 SSH 세션이 중단될 위험이 있습니다(네트워크 장애, 로컬 시스템 전원 장애, 예상치 못한 PuTTY 창 닫기, Windows 대기/최대 절전 모드 진입 등). SSH 세션이 종료되면 이동 작업이 중단되거나(완료되지 않음 - 최선의 경우) 데이터가 손실/손상됩니다(최악의 경우).
제 생각에는 많은 양의 데이터를 이동할 때 rsync가 더 나은 선택입니다. 첫째, 진행 상황을 표시하도록 쉽게 설정할 수 있기 때문입니다(그래서 멈추지 않는지 등을 알 수 있습니다). 둘째, 중단된 경우 이미 성공적으로 수행된 작업을 다시 실행하지 않고도 다시 시작할 수 있기 때문입니다...