큰 폴더 이름 바꾸기 : 위험합니까?


19

mv명령을 사용하여 폴더 이름을 180GB로 바꾸는 것이 위험 합니까?

/data180GB가 포함 된 폴더 가 있습니다.

명령 /data/BD_FILES사용하여 폴더의 이름을 바꾸려고합니다 mv.

그렇게하는 것이 안전한가요?


14
왜 그리고 어떻게 위험해야합니까? 확실하지 않으면 옵션으로 전화 mv하십시오 -i.
디저트

5
환경에 위험하다고 생각하게 만드는 것이 있습니까?
Jeff Schaller

2
그 행위 자체가 문제를 일으킬 수있는 위험이 있는지 또는 문제가있는 효과가 발생할 위험이 있는지 여부를 의미합니까? / data 폴더가있을 것으로 예상되는 프로그램이 있으면 이름을 바꾸면 문제가 발생할 수 있습니다.
Accumulation

3
참고 : 백업을 확인한 경우 거의 모든 것이 안전합니다. 당신이하지 않으면 안전만큼 안전하지 않습니다. 다시 말해서 : "안전한지"물어볼 때 첫 번째 생각은 "내 백업을 확인 했습니까?"입니다.
RedGrittyBrick

2
이 OS에 의해 데이터가있는 거대한 폴더를 이동할 때 문제가 될 수있는 위험은 예를 들어 중간에서 이동을 중지하거나 데이터를 잃을 수 있습니다
yael

답변:


71

동일한 파일 시스템 내에 있으면 폴더의 이름을 변경해도 안전합니다.


마운트 포인트 인 경우 ( /data내가 마운트 포인트 일 수있는 것처럼 보이면 이것을 사용하여 확인하십시오 mount) 데이터를 루트 파티션으로 이동하기 mv때문에 단순한 것 이외의 작업을 수행해야 mv /data /BD_FILES합니다 ( 당신이 일어나고 싶어).

파일 시스템을 마운트 해제하고 지금 비어있는 디렉토리 /etc/fstab의 이름을 바꾸고이 파일 시스템의 새 위치로 업데이트 한 다음 이름이 바뀐 위치에서 파일 시스템을 다시 마운트해야합니다.

다시 말해,

  1. umount /data
  2. mv /data /BD_FILES( /BD_FILES이 경우에는 존재하지 않는다고 가정하면 먼저 이동하십시오)
  3. 업데이트 /etc/fstab, 마운트 지점을에서 /data로 변경/BD_FILES
  4. mount /BD_FILES

여기에는 파일 복사가 필요하지 않으며 파일 시스템의 마운트 지점 역할을하는 디렉토리 이름 만 변경됩니다.


디렉토리 이름을 바꾸는 데 디렉토리를 새 파일 시스템으로 옮기는 경우 (예 /data를 들어 한 디스크에있는 동안 /BD_FILES다른 디스크에있는 경우 더 큰 파티션으로 이동하는 경우 일반적으로 수행) 복사가 정상인지 확인할 수있을 때까지 원본을 그대로두고 데이터를 복사하는 것이 좋습니다. 당신은 이것을 할 수 있습니다

rsync -a /data/ /BD_FILES/

예를 들어, rsync이 작업과 수행하지 않은 작업에 대한 설명서를 참조하십시오 (예 : 하드 링크를 유지하지 않음).


폴더 이름이 바뀌면 기존 절차 (폴더를 사용하는 프로그램 및 사용자, 백업 등)가 이름 변경을 인식하고 있는지 확인해야합니다.


9
이 일이 기대가되는 위험이 mv단지 할 수있는 rename시스템 호출,하지만 사정에 하나가 파일을 복사하고 원본을 삭제하는 것입니다 실현되지 않았습니다. 내가 확실히 rename시스템 호출을하고 mv내 뒤에 "영리한"무언가를하지 않을 것이라고 확신 할 필요가 있다면 나는 파이썬 쉘을 열고 사용한다 os.rename.
kasperd

3
비교적 최근의 Linux 커널을 사용하면 대신 마운트 지점을 이동할 수 있습니다.mkdir /BD_FILES && mount -M /data /BD_FILES && rmdir /data
David Foerster

2
@MichealJohnson 아마도 Linux 시스템에서 작동 할 것입니다. 깔끔한 것은 다시 rsync시작할 수 있다는 것입니다.
Kusalananda

3
@MichealJohnson One은 가장 편리한 도구를 사용합니다. 예. rsync -a거의 모든 메타 데이터는 유지하지만 하드 링크, ACL 또는 확장 된 속성은 유지하지 않습니다 (추가 -HAX).
Kusalananda

3
@Max 분포 rename에 따라 동작 이 다른 명령이 다릅니다. 나는 그것이 rename당신이 할 일을 확신하고 싶을 때 명령을 사용하지 않기에 충분한 이유라고 생각합니다 .
kasperd

16

디렉토리의 모든 파일 이름을 바꾸는 것이 아니라 /에서 하나의 파일 이름을 바꾸는 입니다. 그것은 왜냐하면:

  1. 디렉토리는 파일이며
  2. 파일 시스템은 실제 텍스트가 아니라 inode에 관심이 있습니다.

따라서 파일의 수나 데이터의 양에 관계없이 디렉토리 이름을 바꾸는 것은 쉽지 않습니다.


14

동일한 파일 시스템의 소스 및 대상 이름 만 바꾸면 디렉토리 항목의 이름 만 변경됩니다. 성공하고 디렉토리에 새 이름이 있거나 실패하면 아무 것도 변경되지 않습니다 * .

소스와 대상이 다른 파일 시스템에 있으면 데이터를로 복사해야합니다 mv. 최대 파일 크기, 파일 이름 제한 등과 같은 파일 시스템 기능의 차이로 인해 문제가 발생할 수 있습니다. 문제를 피하려면 먼저 파일을 복사하고 ( cp,, rsync…) 복사가 성공적으로 완료되면 원래 위치에서 파일을 제거하십시오.

* 그러나 man 2 renameBUGS 섹션에 언급 된 것과 같은 일부 경우가 있습니다.


> "성공적으로 디렉토리 이름이 바뀌거나 아무 것도 변경되지 않습니다." 어떻게 보장 되나요? 모든 파일 시스템에 적용됩니까? 이것에 관한 문서가 있습니까?
turbanoff

이름 바꾸기는 단일 syscall이지만 man renameBUGS 섹션 에 NFS에 대한 참고 사항이 있습니다. NFS를 사용할 때 오류가 반환되는 경우에도 이름을 바꿀 수 있습니다 (man 페이지의 세부 사항 참조). 답변에 메모를 추가했습니다. 커널의 파일 시스템이 이름 변경에 실패하면 디렉토리 항목이 사라질 수 있다고 생각하지 않습니다.
sebasth

8

다른 사람들이 말했듯이 폴더 이름을 바꾸면 내용에 내재 된 위험이 없습니다. 그러나 고려해야 할 다른 종류의 위험이 있습니다.

원래 위치를 참조하는 기존 절차, 스크립트, 사용자 정의 바로 가기 및 구성은이 변경으로 인해 손상 될 수 있으며 경로가 데이터베이스에 저장된 경우 업데이트하는 것이 큰 작업이 될 수 있습니다.

할 수있는 한 가지는 새 디렉토리 이름에 대한 심볼릭 링크를 만드는 것이지만 이전 이름은 잠시 그대로 두십시오. 그러면이 변경의 영향을 평가할 시간이 제공됩니다. 이전 이름을 일시적으로 제거하고 문제가 있는지 확인한 다음 문제가있는 경우 이전 이름을 다시 작성하면 업데이트해야 할 사항을 파악하는 동안 사람들이 계속 작업 할 수 있습니다.

이와 같은 명령으로 수행해야합니다. ln -s /data /BD_FILES


4
아직 언급하지 않은 또 하나의 경미한 위험은 해당 폴더의 백업 전략에 따라 180GB의 "새"데이터가 갑자기 나타나서 백업 드라이브에 디스크 공간 및 대기 시간 문제가 발생할 수 있다는 것입니다. 백업하십시오.
Kent

나는 같은 것을 선호합니다 mv thing1 thing2 ; ln --symbolic ./thing2 thing1. 그렇게하면 새 이름이 생겨 심볼릭 링크를 삭제하여 기존 이름이 없는지 쉽게 테스트 할 수 있습니다.
can-ned_food

3

이름 바꾸기는 원 자성입니다. 합리적 인 유일한 위험은 mv어떤 이유로 든 모든 것을 복사하기로 결정하고 반으로 충돌하는 것입니다. 당신이 GNU이있는 경우 mv, mv -T이러한 위험을 제거합니다.

mv -Tmv폴더가 아닌 폴더로 이동하고 있음을 알려줍니다 . mkdir()폴더를 이동하면 폴더가 실패하고 어떤 이유로 복사하기로 결정한 경우 거부 하게됩니다.

mv -T몇 년 전 석사 논문 작업을하는 동안 버그를 털어내는 데 관여했습니다 . 너무 많은 경우에 잘못된 일을 했었습니다.

반면 루트 파티션에는 180GB의 사용자 데이터가 있습니다. 아마도 이것을 루트 파티션에서 옮기고 싶을 것입니다.


"루트 파티션"에 있는지 여부는 이름만으로는 알 수 없습니다.
피터

@Peter : 루트 파티션에 있지 않으면 마운트 포인트입니다. mv 명령으로 마운트 된 마운트 포인트의 이름을 바꿀 수 없습니다.
Joshua
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.