유닉스-실수로 루트 아래의 모든 것을 / old로 이동-Solaris 10


13

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

Linux에 대한 많은 루트 또는 / usr / bin 복구 팁 등을 찾았지만 Solaris 10 / Unix에 관한 정보는 엄밀하고 드물지 않습니다.

실행할 수 없습니다 cp, ln, mkdir또는 mv이후 Cannot find /usr/lib/ld.so.1. 머신에 다른 세션으로 로그인 할 수 없습니다. 하나의 세션이 여전히 작동하지만 사용할 수 있고 해당 창이 중지되었습니다 while true; do date; echo hej 1234567; done. USB 드라이브에서 Solaris 부트 CD와 Linux 디스플레이를 사용하는 솔루션에 대해 설명했습니다. 하드 드라이브 디스크를 다른 랙으로 전환하는 솔루션에 대해 설명했습니다.

/.../static/.../mv솔루션은 테스트되었습니다하지만 그것은 작동하지 않았다.

아직 사용할 수있는 명령 (사용할 수있는 이상의 명령이있을 수 있습니다) : echo, <, >, >>, |, pwd, cd.

없이 디렉토리 또는 폴더를 만드는 방법이 mkdir있습니까? 사용할 수있는 방법이 있나요 echo>또는 echo>>복원하는 방법은 /usr/lib/ld.so.1? 나는 /usr/lib/ld.so.1명령이 작동하기 위해 아마도 더 많은 것을 복원해야 한다는 것을 알고 있습니다.

읽어 주셔서 대단히 감사하고 좋은 하루 되세요 =)


2
/ old에서 물건을 옮기는 데 어떤 명령이 사용 되었습니까?
schaiba

솔라리스 표준 mv. 또는 더 정확하게 : shopt -s extglob; mv !(old) /old.
Propatence

1
현재 어떤 쉘이 실행되고 있습니까? 일부 포탄에는 내장 명령이 있습니다
Ferrybig

ln작동하면 문제를 해결할 수 있습니다.
David Schwartz

2
"/.../static/.../mv 솔루션이 테스트되었지만 작동하지 않았습니다." 어떻게 된 거예요? 로더 오류가 발생 했습니까? 정확히 "작동하지 않았다"? static임시 미디어를 부팅하지 않으려는 경우 바이너리가 정확하게이 범주의 문제에 해당합니다.
Ti Strga 2012

답변:


19

더 이상 루트로 실행중인 쉘이없는 경우 복구 미디어로 재부팅해야합니다. 루트 파일 시스템 읽기 / 쓰기를 마운트 할 수있는 한 모든 작업이 수행됩니다.

여전히 루트로 명령을 실행할 수 있다면 모든 것이 공허합니다. LD_LIBRARY_PATH기본 시스템 도구가 사용하는 라이브러리를 포함하는 디렉토리를 가리 키도록 환경 변수 를 설정하십시오 . 그것은 적어도 /usr/lib32 비트 Solaris, /usr/lib/6464 비트 Solaris, 아마도 다른 디렉토리에 있습니다 (지금은 Solaris 10에 액세스 할 수 없으므로 확인하지 마십시오). 실행 파일을 실행하려면 런타임 링커로 접두사를 붙입니다 : /usr/lib/ld.so.1(32 비트 실행 파일의 경우) 또는 /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/* /

로더의 현명한 사용. 전체 계층이로 이동되지 않은 경우 /oldPeschke 자신의 의견에 대한 내 의견도 여기에서 유효합니다. , 등의 mv기존 계층 구조를 유지하는 명령을 사용해서는 안됩니다 . paxtar
jlliagre

1
양해 해 주셔서 감사합니다. 시간을내어 작성해주세요. 지금과 같은 명령을 실행 작품 /old/usr/lib/ld.so.1 /old/usr/bin/mv/old/usr/lib/ld.so.1 /old/usr/bin/cp등등을. 내가 할 수있는 일을 볼 수 있습니다. 이제 문제는 공간이 부족하지만 문제를 해결할 수 있다는 것입니다.
Propatence

@propatience 너무 나쁜 당신과 질은 내 의견을 고려하지 않았다 ...
jlliagre

1
예이! 내가 처음으로 다시 모든 이동 관리 /old/usr/lib/ld.so.1 /old/usr/bin/mv하고 /old/usr/lib/ld.so.1 /old/usr/bin/cp있지만 공간이 있으므로 사용하지 수를 /old/usr/lib/ld.so.1 /old/usr/bin/cp. 그런 다음을 $PATH사용하여 편집 한 다음 폴더별로 폴더를 mv변경하십시오 $PATH. 이제 다시 돌아가서 다시 로그인하고 df -h와 모든 것을 입력 할 수 있습니다. 대단히 감사합니다. 정말 감사합니다 @Gilles! StackExchange 감사합니다!
Propatence

1
설정 LD_LIBRARY_PATH당신이 32 비트 및 64 비트 실행 파일을 실행할 수 있도록 설정해야하는 경우 Solaris에서하는 몇 가지 위험이있다. LD_LIBRARY_PATHSolaris에서 사용 가능한 32 비트 및 64 비트 특정 버전을 사용하는 것이 좋습니다 . 이 경우 : LD_LIBRARY_PATH_32=/old/usr/libLD_LIBRARY_PATH_64=/old/usr/lib/64. 참고 항목 ld.so.1man 페이지를 "각 환경 변수가 _32 또는 _64 접미사로 지정 될 수 이것은 32 비트 또는 64 비트 프로세스에 각각 환경 변수를 특정한다.."
Andrew Henle

16

셸 내장 명령만으로 디렉토리를 만들거나 이진 파일을 복사 할 수있는 방법은 없습니다 (물론 Gilles가 답장에 스마트 한 잠재적 해결 방법 설명하지만 ).

가장 좋은 방법은 외부 매체 (dvd, usb stick)에서 Solaris를 부팅하고 파일 시스템을 마운트하거나 가져오고 다음과 같은 방법으로 혼란을 해결하는 것입니다.

  • Solaris 설치 디스크를 부팅하고 쉘을 실행하도록 선택하십시오.

  • 이전 루트 (및 다른 파일 시스템이있는 경우)를 /mnt또는 같은 디렉토리에 마운트하십시오 /a. Solaris 부트 디스크는 기존 파일 시스템을 탐지 할 때 그렇게하는 데 도움이 될 수 있습니다.

  • 이 명령을 사용하여 파일을 원래 위치로 되돌립니다 (모두가 아래에 마운트되었다고 가정 /mnt).

    cd /mnt/old
    find . -depth | cpio -pdlmPV@ /mnt
    
  • 시스템을 재부팅

    init 6
    

ZFS를 사용 중이고 최근 스냅 샷이있는 경우 /old디렉토리를 다른 곳에 백업 한 다음 마지막 스냅 샷으로 되 돌리는 것도 옵션 일 수 있습니다.


좋은 대답입니다. 복구 USB로 부팅하고 파일 시스템을 마운트 한 후 다음과 같은 작업을 수행하십시오.mv /mountpoint/old/* /mountpoint
Peschke

1
@Peschke 감사하지만 제안 된 mv명령을 맹목적으로 실행하는 것은 내 충고가 아닙니다. OP는 "모든 것 또는 거의 모든 것 "을 썼습니다 . 두 번째 경우 이동하면 기존 디렉토리가 중단됩니다. tar, 같은 유틸리티를 사용 pax하거나 cpio대상 디렉토리 계층을 보존 할 수 있습니다.
jlliagre

신속하게 답변 해 주셔서 감사합니다. 답변 해 주셔서 감사합니다. 나는 내일 이것을 시도 할 수 있습니다.
Propatence

가능한 스냅 샷 (ZFS 또는 UFS)과 연결되어 라이브 업그레이드를 사용하는 경우 대체 BE로 부팅 할 수 있습니다. lustatus 그리고 아직 당황하지 마십시오. 모든 데이터는 여전히 디스크에 존재합니다.
sleepyweasel

0

솔라리스는 정적 기본 유틸리티 (빌드를 포함 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.


이것은 적어도 Solaris 2.5.1로 거슬러 올라갑니다. 여기서 ld.so.1Gilles의 예제와 같이 수동으로 실행하려고 하면 주식 segfault가 발견됩니다
rakslice
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.