연구실에 NAS(eTrayz)를 설치해 사용하고 있었는데 정전이 문제였는지
NAS가 완전 먹통이 되어버렸다. Web, FTP, SSH, Reinstall 모두 불가!!
iTune library 폴더를 NAS에 두고 사용했기 때문에 아이폰, 아이패드 모두 싱크 불가!!
하드만 떼어 마운트 해보려했지만, 윈도우 및 맥에서는 xfs 파일시스템을 지원하지 않아 불가!!
리눅스는 xfs 가 지원되지만 설치하자니 너무 큰일이 될듯하여 일단 NAS를 분해했다.
(Debugging 용 단자를 기대하며...)
eTrayz의 메인보드에는 역시 사용하지 않는 커넥터가 존재했다. CON6, 4pin..
문제는 핀배열을 알 수가 없다는 점.
RS232 칩도 붙어있지 않은데다. 프로세서 마저 BGA 방식이라 확인이 불가능했다.
일단 테스터기를 통해 VDD.GND는 확인(3.3V regulator에 연결됨)
나머지 두 핀이 rxd, txd 일테니 일단은 PC와 연결하기로 했다.
예전에 만들어 두었던 uart-rs232 보드를 찾고, 커넥터를 제작하여 연결!!
일단은 핀배열을 찾기 위해 가장 빠른 baudrate으로 설정하여 테스트!!
아무 출력도 나오지 않아 두 핀을 바꾸니 화면 출력 성공!!
이로써 eTrayz 메인보드의 사용하지 않는 4핀 커넥터는 uart 인것으로 확정!!
핀배열은 다음과 같다.
1. VDD(3.3V, 보드상에 삼각형 표시)
2. TxD(TTL, 보드의 출력)
3. RxD(TTL, 보드의 입력)
4. GND
통신속도를 알아내기 위해 유력한 설정을 적용.
115200,8n1
57600,8n1
38400,8n1
19200,8n1
등 거의 모든 설정을 적용해 보았지만
알 수 없는 문자들로 가득할 뿐..
결국 오실로스코프까지 동원하여 baudrate을 확인했지만
115200,8n1 로 판별되었지만 전혀 제대로된 글이 보이지 않음...
PC에서 키보드로 문자를 보내보기로 하고 하나하나 테스트 하다가
오실로스코프 상에서 nas로 들어가는(RxD) 신호가 제대로 전송이 안되는 점 발견!!
(아무리 해도 안되길래 암호화 된 것인줄 알았음..;;)
결국 uart-rs232 보드가 오래된 탓에 GND 가 제대로 연결이 안되어 데이터 전송이 제대로 안되었던것
uart 단과 rs232단 그리고 칩의 GND를 제대로 연결해주니 드디어 글자가 나온다!!!
nas에 다시 하드를 장착하고 부팅시켜 부팅 메세지를 살펴보니...
Starting license: /etc/rc3.d/S75license: line 16: /var/www/ibox/op_script/productLicense: No such file or directory
아무래도 NAS관리 웹페이지를 직접 만들어보겠다고 원래 파일들을 다른 곳으로 옮겨둔것이 화근이었던듯 ㅠㅠ
그 안에 라이센스 파일이 들어있었나보다..
이부분에서 부팅이 진행되지 않고 멈춰있었다..
다시 재부팅!!
U-Boot 1.1.2 (Apr 5 2010 - 16:56:47)
U-Boot code: 48D00000 -> 48D1B860 BSS: -> 48D1F670
RAM Configuration:
Bank #0: 48000000 128 MB
SRAM Configuration:
128KB at 0x58000000
Flash: 4 MB
In: serial
Out: serial
Err: serial
Extinguish LED
Light LED
Initialising disks
No FIS received from device 1
No FIS received from device 1
Detecting SATA busses:
Bus 0: Found first device OK
Device 0: Model: ST3250410AS Firm: 3.AAF Ser#: 6RY66PM7
Type: Hard Disk
Supports 48-bit addressing
Capacity: 238475.1 MB = 232.8 GB (488397168 x 512)
Device 1: not available
IDE read: device 0 block # 288, count 1 ... 1 blocks read: OK
Hit any key to stop autoboot: 0
$ help
? - alias for 'help'
base - print or set address offset
bdinfo - print Board Info structure
bootm - boot application image from memory
bootp - boot image via network using BootP/TFTP protocol
cmp - memory compare
cp - memory copy
crc32 - checksum calculation
diskboot- boot from IDE device
echo - echo args to console
erase - erase FLASH memory
exit - exit script
ext2load- load binary file from a Ext2 filesystem
ext2ls- list files in a directory (default /)
flinfo - print FLASH memory information
go - start application at address 'addr'
help - print online help
ide - IDE sub-system
iminfo - print header information for application image
ledfail - Extinguish (0) or light (1) failure LED
loop - infinite loop on address range
md - memory display
mm - memory modify (auto-incrementing)
mtest - simple RAM test
mw - memory write (fill)
nm - memory modify (constant address)
ping - send ICMP ECHO_REQUEST to network host
printenv- print environment variables
protect - enable or disable FLASH write protection
rarpboot- boot image via network using RARP/TFTP protocol
reset - Perform RESET of the CPU
run - run commands in an environment variable
saveenv - save environment variables to persistent storage
setenv - set environment variables
test - minimal test like /bin/sh
tftpboot- boot image via network using TFTP protocol
version - print monitor version
$ ls
Unknown command 'ls' - try 'help'
부팅 중 아무키나 눌러 멈추면 간단한 테스트 및 커널 복사 등이 가능!!
이 상태에서 뭘 할 수 있을까?
가능해 보이는 명령은 ide, ext2load, ext2ls 정도 인듯.. 하지만 실행해봐도 사용법만 나올뿐...
명령어 앞에 help를 붙여보니.... 명령어 사용법이 나옴!!(아자!!)
ext2load 는 ext2 파일시스템에서 메모리로 파일을 불러오는 명령인듯.
ext2ls 는 ext2 파일시스템에서 파일 목록을 보는 명령어
ide 는 하드디스크 정보를 보고 선택할 수 있도록 하는 명령어 인듯.
결국 ide로 하드디스크 선택하고 ext2ls 및 ext2load 등을 써서 파일들을 지지고 볶고해야한다는 말..
하지만, 하드디스크에 파일을 옮겨다 복사할 방법이 없으니..... 방도가 없음..
파일시스템을 직접 읽어서 디렉토리 명을 수정하는 방법도 있겠으나.. 너무 힘듬 ㅠㅠ
부트 옵션을 수정해서 single 모드로 부팅할 수 있지 않을까?
환경 변수를 살펴보니
run 이라는 명령어는 run 뒤에 오는 변수에 저장되어있는 명령어를 수행함
추적!!
boot_disk=run select0 load boot || run select0 load2 boot || run lightled select1 load extinguishled boot || run lightled select1 load2 extinguishled boot || run lightled boot_flash
다섯 가지 셋팅 중 가능한 첫번째 것으로 부팅하라는 얘기인듯.
첫번째 하드디스크(A)를 선택해서 부트(load와 load2는 커널 위치인듯)
-> 실패하면 에러 LED켜고(lightled) 두번째 하드디스크(B) 에서 부트 -> 실패하면 flash로 부트
인듯.
마지막 flash로 부트 시도!!
오~ 부팅 완료!! Shell 확인!!
하드디스크 마운트 시도!!
/mnt # mount /dev/sda disk
mount: mounting /dev/sda on disk failed: Device or resource busy
/mnt # mount /dev/sda1 disk
mount: mounting /dev/sda1 on disk failed: Device or resource busy
/mnt # mount -t xfs /dev/sda disk
mount: mounting /dev/sda on disk failed: Device or resource busy
/mnt # mount -t xfs /dev/sda1 disk
mount: mounting /dev/sda1 on disk failed: Device or resource busy
실패 ㅠㅠ
fdisk 로 확인해보니 EFI GPT!!
(※ 추후에 fdisk 말고 parted 를 사용하면 파티션내용을 볼 수 있는 것을 확인했음)
dmesg로 다시 부트 메세지 확인하여 파티션이 3개로 되어있는 것을 확인
다시 마운트 시도..
세번째 파티션이 xfs로 마운트 성공.. 하지만 시스템 파티션이 아니라 데이터 파티션 ㅠㅠ
sda1이 시스템 파티션, sda2가 스왑, sda3가 데이터 였던것으로 기억하는데.....
sda1과 sda2는 자꾸 사용중이라는 메세지.
결국, 하드디스크로 싱글모드 부트 시도!!!
일단 기존 부트 옵션 백업
bootargs=console=ttyS0,115200 root=/dev/md0 ro raid=noautodetect md=0,/dev/sda1,/dev/sdb1 md=1,/dev/sda2,/dev/sdb2 mac_adr=0x00,0x1c,0x85,0x20,0x0c,0xe1 mem=128M poweroutage=yes
수정!!
S, Single, single 등 추가 해도 single 모드로 부팅 안됨 ㅡㅡ;
Single user 옵션이 안먹는다면.. 직접 runlevel 을 변경해보자;;
부트 옵션 끝에 '1' 추가
bootargs=console=ttyS0,115200 root=/dev/md0 ro raid=noautodetect md=0,/dev/sda1,/dev/sdb1 md=1,/dev/sda2,/dev/sdb2 mac_adr=0x00,0x1c,0x85,0x20,0x0c,0xe1 mem=128M poweroutage=yes 1
오~ 성공!!!
변경했던 /var/www/ibox 경로를 복구!!
재부팅!!
드디어 부팅 성공!!!
문제의 license 서비스 확인
/etc/init.d/license
-> 컴파일된 파일임 ;;;
license 서비스를 죽이도록 변경
mv S75license K75license
재부팅 후 라이센스 서비스가 실행안되어도 부팅완료 확인!!
NAS가 제대로 동작하는 것을 확인함.
서비스 번호를 변경하여 sshd 가 license 보다 먼저 실행되도록 하면
나중에 license 문제로 부팅이 안될경우에 ssh로 접속하여 해결 가능할 듯.