유닉스-실수로 루트 아래의 모든 것을 / 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/lib및 LD_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.