unix - 실수로 루트 아래의 모든 항목을 /old로 옮겼습니다. - Solaris 10

unix - 실수로 루트 아래의 모든 항목을 /old로 옮겼습니다. - Solaris 10

제목에서 알 수 있듯이 Solaris 10 시스템에서는 루트(/) 아래의 중요한 모든 또는 거의 모든 것이 /old로 이동되었습니다. 이제 명령을 실행하려고 할 때 발생하는 일반적인 오류는 다음과 같습니다 ( Cannot find /usr/lib/ld.so.1변경 $PATH및 변경을 시도하고 내보내 지만 실제 라이브러리 경로는 변경되지 않는 것 같습니다). 어제 도움이 될 만한 것을 거의 찾아보았지만 아마도 솔라리스 10에서 실제로 라이브러리 경로를 변경할 수 있는 것을 찾지 못했지만 그 이후로는 실행할 수 없었습니다 .$LD_LIBRARY_PATH$LD_LIBRARY_PATH_64$LD_RUN_PATHcrleCannot find /usr/lib/ld.so.1

Linux에 대한 루트 또는 /usr/bin 복구 팁 등을 많이 찾았지만 Solaris 10/Unix에 대한 정보는 풍부하지 않고 매우 희박합니다.

을 ( 를 cp) 실행할 수 없습니다 . 또한 다른 세션을 사용하여 컴퓨터에 로그인할 수도 없습니다. 여전히 실행 중이고 사용 가능한 세션이 있지만 창이 차단되었습니다. 우리는 이미 Solaris 부팅 CD와 USB 드라이브의 Linux 배포판을 사용하는 솔루션을 논의했습니다. 우리는 하드 드라이브 디스크를 다른 랙으로 전환하는 솔루션에 대해 이미 논의했습니다.lnmkdirmvCannot find /usr/lib/ld.so.1while true; do date; echo hej 1234567; done

/.../static/.../mv솔루션은 성공적으로 테스트되지 않았습니다.

아직 사용할 수 있는 명령은 다음과 같습니다(사용 가능한 명령이 더 있을 수 있음): echo, <, >, >>, |, pwd, cd.

디렉터리나 폴더 없이 만들 수 있는 방법이 있나요 mkdir? echoand >또는 echoand 를 사용하여 >>복구할 수 있는 방법이 있습니까 /usr/lib/ld.so.1? /usr/lib/ld.so.1명령이 작동하려면 무엇을 복원해야 하는지 알고 있습니다 .

읽어주셔서 정말 감사드리며, 좋은 하루 보내세요 =)

답변1

더 이상 루트로 셸을 실행하지 않는 경우 복구 미디어로 재부팅해야 합니다. 루트 파일 시스템이 읽기-쓰기로 마운트될 수 있는 한 어떤 방법이든 가능합니다.

여전히 루트로 명령을 실행할 수 있다면 모든 것이 정상일 것입니다. LD_LIBRARY_PATH기본 시스템 도구에서 사용하는 라이브러리가 포함된 디렉터리를 가리키도록 환경 변수를 설정합니다 . 적어도 /usr/lib32비트 Solaris에서는 /usr/lib/6464비트 Solaris에도 다른 디렉토리가 있을 수 있습니다(지금은 Solaris 10에 액세스하여 확인할 수 없습니다). 실행 파일을 실행하려면 앞에 다음을 붙입니다.런타임 링커: ( /usr/lib/ld.so.132비트 실행 파일의 경우) 또는 /usr/lib/64/ld.so.1(64비트 실행 파일의 경우) — 이제 다음을 /old통해 복구할 수 있습니다.

LD_LIBRARY_PATH=/old/usr/lib
export LD_LIBRARY_PATH
/old/usr/lib/ld.so.1 /old/usr/bin/mv /old/* /

답변2

쉘 내장만을 사용하여 디렉토리를 생성하거나 바이너리를 복사할 수 있는 방법은 없습니다(Gilles가 영리한 잠재적 해결 방법을 설명하지만).그의 대답에).

가장 좋은 방법은 외부 미디어(DVD, USB 스틱)에서 Solaris를 부팅하고 파일 시스템을 마운트하거나 가져온 후 다음 명령을 사용하여 문제를 해결하는 것입니다.

  • Solaris 설치 디스크를 부팅하고 셸을 실행하도록 선택합니다.

  • /mnt또는 와 같은 일부 디렉터리 아래에 이전 루트(및 다른 모든 파일 시스템)를 마운트합니다 /a. Solaris 부팅 디스크는 기존 파일 시스템을 감지할 때 이 작업을 수행하는 데 도움이 될 수 있습니다.

  • 이 명령을 사용하여 파일을 원래 위치로 되돌립니다(모든 파일이 아래에 설치되어 있다고 가정 /mnt).

    cd /mnt/old
    find . -depth | cpio -pdlmPV@ /mnt
    
  • 시스템을 다시 시작하세요

    init 6
    

ZFS를 사용 중이고 최근 스냅샷이 존재하는 경우 /old디렉토리를 다른 곳에 백업한 다음 마지막 스냅샷으로 복원하도록 선택할 수도 있습니다.

답변3

Solaris에는 일반 동적 링크 버전의 사용을 방해하는 사용성 문제를 해결하는 데 사용할 수 있는 기본 유틸리티( cp, ln, mv, rcp및 )의 정적 버전이 포함되어 있습니다.tar/usr/sbin/static/usr/lib/ld.so.1/usr/bin

mkdir정적은 제공되지 않지만 정적을 사용 ln하여 포함된 디렉터리를 lib/ld.so.1적절한 위치에 임시로 심볼릭 링크한 /usr다음 표준을 사용하여 mkdir필요한 디렉터리를 만들 수 있습니다. static을 사용하여 기존 디렉토리의 이름을 바꿀 수 있습니다 mv.

이것은 Gilles의 예에서 볼 수 있듯이 수동으로 실행하려고 하면 ld.so.1 재고가 세그폴트된다는 것을 발견한 Solaris 2.5.1 이상으로 거슬러 올라갑니다.

관련 정보