===========시스템 세부정보============
OS: Solaris 10, 업데이트 11
CPU_ARCH: SPARC(sparcv9)
하드웨어: Sun Fire V490(예, 아주 오래된 학교)
KERNEL_REV: 150400-40 프로그램: bpbkar32(Symantec's Netbackup) TL;DR:
일시 중지로 인해
불가능함 프로세스 종료 kill -9
zpool 두 가지 좋은 길이 없을 수도 있기 때문입니다.
질문:
우리 시스템에는 종료할 수 없는 프로세스가 16개 있습니다. 백업 팀은 NB 마스터 서버에서 이러한 작업을 종료하고 새 백업을 생성할 수 없다고 알려주었습니다. 그래서 우리는 다음을 시도하여 ./bp.kill_all
받았습니다.
배쉬-3.2#./bp.kill_all
종료해야 하는 NetBackup 프로세스를 찾습니다.
bpbkar 프로세스를 종료합니다...다음 프로세스는 여전히 활성 상태입니다.
루트 20346 1 0 02:02:33 ? 0:00 bpbkar32 -r 2678400 -ru root -dt 1047868 -to 0 -bpstart_time 1481767648 -clnt n
root 18689 1 0 12월 9일? 0:00 bpbkar32 -r 8035200 -ru root -dt 0 -to 0 -bpstart_time 1481325879 -clnt nerp323
root 12618 1 0 12월 7일? 0:00 bpbkar32 -r 2678400 -ru root -dt 357484 -to 0 -bpstart_time 1481077264 -clnt ne
root 29693 1 0 12월 9일? 0:00 bpbkar32 -r 2678400 -ru root -dt 529430 -to 0 -bpstart_time 1481249210 -clnt ne
root 10168 1 0 12월 9일? 0:00 bpbkar32 -r 2678400 -ru root -dt 530349 -to 0 -bpstart_time 1481250129 -clnt ne
root 1950 1 0 12월 14일? 0:00 bpbkar32 -r 2678400 -ru root -dt 962300 -to 0 -bpstart_time 1481682080 -clnt ne
이 스크립트로 해당 사용자를 종료하시겠습니까? [y,n] (y) y는
나머지 프로세스를 종료합니다...
프로세스 종료를 기다리는 중...
프로세스 종료를 기다리는 중...
프로세스 종료를 기다리는 중...
프로세스 종료를 기다리는 중...
프로세스 종료를 기다리는 중.. .
아직 실행 중인 프로세스가 있습니다.
...가독성을 위해 출력을 자릅니다.
극도의 편견으로 이러한 프로세스를 계속해서 죽이려고 시도했지만 kill -9
소용이 없었습니다. 나는 본 적이종료할 수 없는 작업을 종료하는 방법(무중단?)그리고"kill -9"가 작동하지 않으면 어떻게 되나요?"Solaris uninterruptable process"를 검색하여 부분적인 결과를 얻을 수도 있습니다. 재부팅은 일반적인 주제이자 우리의 "문제 해결" 솔루션인 것 같습니다.
즉, 나는 다음을 원합니다.
- 근본 원인에 대한 내 논리와 추론을 검증합니다
. - 프로세스가 중지된 위치/수행하려고 시도한 시스템 호출을 확인하는 더 나은 방법이 있는지 확인합니다
. - 가능한 경우 다시 시작하지 않고 I/O를 처리합니다. , 이후 프로세스를 종료할 수 없습니다.
거의 근본 원인 분석과 일종의 "백업이 실행 중이거나 두 개의 작업 경로가 없는 경우 향후 전환 작업을 수행하지 마십시오" 완화 조치입니다.
내가 얻은 것/생각한 것은 다음과 같습니다.
1) /proc/1950/ 디렉토리로 이동하여 상태를 확인하십시오. strings
임의의 문자를 뿜어내는 경우에도 주사위는 해당 출력을 이해할 수 없습니다 . "cwd"는 내용이 없는 링크를 표시하며 다음을 통해 이를 해결하려고 하면 ls -alL /proc/1950/cwd
터미널이 중단되고 생성이 발생한다는 점은 주목할 가치가 있습니다.북을 치는 것또 다른 중단 없는 프로세스.
2) a를 실행하면 pstack 1950
몇 가지 유용한 정보가 생성되지만 a에서 보거나 이해할 수 없는 정보는 없습니다 ps -eaf
. 하지만 모두 0입니다. 작업 pid로 할 수 있는 것처럼 주소나 시스템 호출을 볼 수 없기 때문에 좋지 않습니다.
배쉬-3.2#pstack 1950
1950: bpbkar32 -r 2678400 -ru 루트 -dt 962300 -to 0 -bpstart_time 1481682080 0000000000000000 ????????(0, 0, 0, 0, 0, 0)
3) truss
실행 중인 프로세스에서 실행하려고 하면 프로세스가 중단되고 pfiles
"pfiles: 프로세스 1950을 제어할 수 없습니다"라는 오류도 생성됩니다. 재미 있지만 흥미 진진합니다.
4) 실행하면 strace
"트래커가 이미 존재합니다"라고 표시됩니다.
5) a를 실행하여 pwdx
cwd를 인쇄하고 다음을 반환합니다:
bash-3.2#pwdx 1950
1950: /버킷
우리의 df에 그것이 포함되어 있기 때문에 이것은 흥미 롭습니다 ...
df -h /bucket
사용된 파일 시스템 크기
버킷에 탑재된 사용 가능한 용량 1.9T 31K 1.9T 1%/버킷
...하지만 /bucket으로 CD를 이동하고 작업을 수행하려고 하면 ls
동일한 정지 효과가 발생합니다.
배쉬-3.2#zpool list
이름 크기 할당 무료 한도 상태 ALTROOT
Bucket 1.94T 308K 1.94T 0% Pause -
rpool 136G 58.0G 78.0G 42% Online -
배쉬-3.2#umount /bucket
'버킷'을 열 수 없습니다. 풀 I/O가 현재 일시 중지되었습니다.
배쉬-3.2#zpool export bucket
'/bucket'을 마운트 해제할 수 없습니다. 장치가 사용 중입니다.
배쉬-3.2#zpool status -x
풀: 버킷
상태: 일시 중단
상태: IO 오류로 인해 하나 이상의 장치에 오류가 발생했습니다.
조치: 영향을 받는 장치가 연결되어 있는지 확인한 다음 'zpoolclear'를 실행하십시오.
바라보다:http://www.sun.com/msg/ZFS-8000-HC
스캔: 요청 없음
구성:
이름 상태 읽기 및 쓰기 CKSUM
버킷 일시 중지됨 0 0 0 I/O 오류 발생 c3t50060E80102B1F5Ad78 오류 2 0 0 오류가 너무 많음
으응...물속에 빠진 것 같은 느낌이 듭니다. 실제로 "전환 작업"이 발생했을 때 SAN에 대한 활성/정상 경로가 두 개 없었기 때문에 결국 vdev 아래에서 깔개를 꺼내게 되었습니다. 다이의 백업은 거기에서 작동하지만 모든 프로세스(나 같은 ls
)는 동일한 동작을 갖습니다.
"이 알 수 없는 명령을 실행하면 재부팅하는 데 도움이 됩니다"에 대한 마지막 순간 저장 아이디어가 있는 사람이 있습니까? ? ?
답변1
Jeff가 제안한 것처럼 zpoolclear는 경로가 반환된 경우 문제를 해결하는 데 도움이 됩니다. 그렇지 않은 것처럼 들리므로 서버에 LUN이 표시되지 않을 수 있습니다.
A는 zpool clear -F -n bucket
또한 마지막 트랜잭션 세트를 삭제하여 풀을 가져올 수 있는지 여부도 알려줍니다(-F 옵션).
작업 전환을 언급했으므로 수행된 작업과 변경 사항 중 하나가 해당 경로를 제거했는지 여부를 확인하고 싶을 수도 있습니다. "luxadm display /dev/rdsk/c<____>s2 출력"을 보셨나요? 아니면 cfgadm을 사용하여 경로를 재구성해 보시겠습니까? 아니면 경로를 따라 forcelip 이벤트를 보내시겠습니까?
a의 전체 출력은 zpool status bucket
풀 유형(거울, 고양이, 스트라이프 등)을 결정하는 데 도움이 될 수도 있습니다. 질문에 따르면 거울이 아니라고 가정합니다.
나는 이 일에 관여하지 않았기 때문에 쉽게 말할 수 있다는 것을 알고 있지만 이것이 문제가 되지 않는다고 가정하면 데이터가 여전히 배열에 모두 존재해야 하므로 당황하지 마십시오. 그러나 결국 일부 트랜잭션을 다시 가져오고 롤백해야 할 수도 있습니다.
행운을 빌어요!
답변2
다음을 사용하여 SAN 상태(FC SAN 가정)를 볼 수 있습니다.
for port in `fcinfo hba-port | grep Port | awk '{ print $4 }'`; do
> fcinfo remote-port -ls -p $port
> done
또한 꼭 읽어주세요매뉴얼 페이지mpathadm
. 이를 사용하여 mpathadm show lu LUN
LUN의 상태를 표시할 수 있습니다.