/tmp를 다른 볼륨으로 (안전하게) 이동하는 방법은 무엇입니까?

/tmp를 다른 볼륨으로 (안전하게) 이동하는 방법은 무엇입니까?

현재 /tmp작업 기계의 디렉토리가 가득 찼습니다. 문제는 그다지 크지 않은 루트 파티션에 있다는 것입니다. 문제를 해결하기 위해 동료는 /new/tmp다른 곳에 디렉터리를 만들고 모든 내용을 새 디렉터리에 복사한 다음 원래 디렉터리를 삭제 /tmp하고 심볼릭 링크를 만들었습니다 /tmp -> /new/tmp.

파일을 복사했을 때(사실 제가 아닌 다른 사람이 한 것이었습니다!) 사용하지 않았기 -a때문에 아래 각 파일의 소유자 /new/tmp는 입니다 . 또한 디렉토리를 root설정할 권한도 없었 으므로 해당 파일을 복사한 것입니다. /new/tmp기본값은 0755였습니다. 이로 인해 끝없는 문제가 발생했으며 모드와 소유권 비트를 조정하더라도 기계를 허용 가능한 작동 상태로 복원하지 못했습니다. 결국 모든 것을 날려버리고 /tmp다시 시작해야 했습니다.

/tmp많은 사람들이 VNC를 통해 Gnome을 실행하고 있고 나는 screen그것을 사용하는 자체 파이프를 가지고 있기 때문에 이 디렉토리에는 다양한 소켓과 파이프 등이 포함되어 있습니다.

당신은 가지고 있습니까?안전한/tmp실행 중인 시스템에서 디렉터리를 다른 볼륨으로 어떻게 이동합니까 ? 모든 것이 제대로 작동하도록 실제로 무엇을 해야 할지 잘 모르겠습니다. 특히 파이프와 소켓은 어떻게 될지 궁금합니다.

답변1

"클라이언트" 컴퓨터에서 이동하는 안전한 방법은 /tmp재부팅하는 것입니다. 여기서 클라이언트란 소켓을 실행하는 모든 프로그램 /tmp, 특히 X 서버와 화면을 의미합니다.

새 버전에는 /tmp반드시 올바른 권한(1777)이 있어야 합니다. 그렇지 않으면 작동하는 시스템을 기대할 수 없습니다.

의 경우 /tmp파일을 거의 복사할 수 없습니다. 이는 대부분의 경우 /tmp파일 내용을 파일에 저장하는 프로그램에 의해 열리기 때문입니다. 파일을 복사하면 내용은 복사되지만 프로그램은 여전히 ​​이전 파일을 엽니다. 디버거( )를 사용하여 액세스할 수 있지만 ptrace재부팅하는 것보다 더 복잡하며 많은 프로그램에서 수행하는 작업은 충돌뿐입니다.

프로그램 /tmp이 꽉 찼는데 새 프로그램으로 전환하려면 파일이 열려 있는 모든 프로그램을 다시 시작해야 합니다. 이는 X 및 스크린 세션을 다시 시작한다는 의미이므로 다시 시작하는 것보다 낫지 않습니다.

새 프로그램으로 전환할 수 있어야 하지만 다음을 사용하여공동 설치. (원리는 맞는데 한번도 시도해보지 않아서 예상치 못한 문제가 발생할 수 있습니다.) Linux에서 이를 수행하는 한 가지 방법이 있습니다.

  1. /tmp수동으로 선택한 일부 대용량 파일을 제외한 모든 기존 파일을 유지합니다.
  2. 하나를 만듭니다 /tmp.new(모드 1777).
  3. /tmp다른 경로에 노출됨 : mount --bind / /.root.only다음 단계에서 그림자가 생성되므로 이는 필요합니다 /tmp. 이 단계가 필요하지 않은 다양한 페더레이션 설치 구현이 있을 수 있습니다.
  4. /.root.only/tmp공동으로 제작하여 설치하고 /tmp.new, 에 설치하세요 /tmp. 이렇게 하면 에서 생성된 새 파일이 /tmp기록되지만 /tmp.new의 파일은 /.root.only/tmp에서도 볼 수 있습니다 /tmp. 한 가지 가능성은 UnionFS 퓨즈: unionfs-fuse /tmp.new:/.root.only/tmp /tmp.

연합 마운트 루트로 이동하고 싶지 않은 경우(예를 들어 플랫폼에서 사용할 수 없거나 너무 번거롭기 때문에) 최소한 이전 디렉터리를 삭제하지 마세요.이동하다, 실행 중인 프로그램은 계속해서 이전 디렉터리를 사용하고 새 프로그램은 새 디렉터리를 사용하도록 합니다. (물론, 찾을 위치를 /tmp설정하거나 TMPDIR달리 알려주지 않으면 새 프로그램은 소켓이나 파이프를 통해 이전 프로그램과 통신할 수 없습니다 .)

mv /tmp /tmp.old && mkdir /tmp

관련 정보