SCSI는 Small Computer Systems Interface의 약어입니다. 이는 컴퓨터 업계에서 선도하는 I/O 버스 중 하나인 ANSI 표준입니다. SCSI 표준의 초석은 SASI (Shugart Associates Standard Interface) bus를 소개한 Shugart Associates에 의해 (세계 최초로 소형 플로피 디스크를 제공한 사람들) 만들어졌습니다.
얼마후 디바이스가 다른 제작사의 것들과 함께 동작할 수 있도록 하도록 좀더 엄격한 표준을 이루려는 업계의 노력이 있었습니다. 그 노력으로 ANSI SCSI-1 표준이 만들어졌습니다. SCSI-1는 (approx 1985) 빠르게 사장되어가고 있습니다. 현재의 표준은 SCSI-2이고 ( 추가사항을 보십시오), 앞으로 계획상 SCSI-3가 될 것입니다.
물리적인 상호 연결 표준에 추가로, SCSI는 디스크 디바이스가 반드시 지켜야만 되는 논리적 (명령어 집합체) 표준을 정의하고 있습니다. 이 표준은 일반 명령어 집합체라 (CCS : Common Canmmand Set) 하고 ANSI SCSI-1과는 다소 병렬적으로 개발되었습니다. SCSI-2는 자체에 표준의 일부로서 (계정된) CCS를 포함하고 있습니다. 이 명령어들은 쓰고 있는 장치의 종류에 의존합니다. 스캐너에서 쓰기 명령을 정의하는 것은 당연히 이치에 맞지 않습니다.
SCSI 버스는 병렬 버스인데, 이는 여러가지 종류가 있습니다. 오래된 것 그리고 대다수의 것들은 단일-종단형(single-ended) 신호이고 50개의 선으로 전송되는 8 bit 폭의 버스입니다. (단일-종단이 무얼 의미하는지 몰라도 걱정하지 마십시오, 문서에는 그것에 대한 모든 것이 있읍니다.) 근래의 디자인은 차동형 신호, 16 bit 폭의 버스를 또한 사용하고 있습니다. 이것은 20MB/s의 전송 속도를 허용하고 있으며, 케이블 길이도 25미터까지 가능합니다. SCSI-2는 추가 케이블을 사용해서 최대 32bit의 버스 폭까지 허용하고 있습니다. Ultra SCSI (또는 Fast-20이라 일컬어지는) 그리고 Ultra2가 (또는 Fast-40) 정말 빠르게 성장하고 있습니다. Fast-20은 초당 2000만 단위로 전송할 수 있고 (8 bit 버스에서 20 MB/s), Fast-40은 초당 4000만 단위로 전송할 수 있습니다. (8 bit 버스에서 40 MB/s) 오늘날 판매되는 대부분의 하드 드라이브는 단일-종단형 (8 또는 16 bit) Ultra SCSI입니다.
물론 SCSI 버스는 데이터 선만이 아니라, 여러 제어선도 지니고 있습니다. 매우 정교하고 복잡한 프로토콜은 효과적인 방법으로 복수의 디바이스가 버스를 공유토록하는 표준의 한 부분입니다. SCSI-2에서, 데이터는 항상 별도의 패리티 라인(line)을 이용하여 검사되고 있습니다. SCSI-2이전의 구상에서는 패리티는 옵션이었습니다.
SCSI-3에서는 케이블 오버헤드를 줄이고 최대 길이를 보다 길게한 직렬 SCSI 버스와 함께 보다 빠른 버스들이 소개되고 있습니다. 이 문서에서 SSA와 Fiberchannel과 같은 이름을 보게될 것입니다. 직렬 버스들 중 어느 것도 지금 널리 쓰이고 있지는 않습니다. (특히 전형적인 FreeBSD 환경에서는 그렇습니다.) 이런 이유로 직렬 버스 타입은 이 이후로 언급하지 않겠습니다.
위의 소개로 추측할 수 있는 것과 같이 SCSI 디바이스는 지능적입니다. 이것들은 SCSI 표준을 (2 인치의 두께의 BTW입니다.) 지켜야만 합니다. 그래서, 하드 디스크 드라이브를 예로 들면 특정 블럭에 접근하기 위해 헤드/실린더/섹터를 일일이 정해주지 않고 단지 간단히 원하는 블럭의 번호만 지정해주면 됩니다. 정교한 캐시처리 계획, 자동 배드 블럭 교체 등등은 이 '지능적인 디바이스' 접근으로 모두 가능합니다.
SCSI 버스에서 장치들의 각가의 가능한 짝은 소통될 수 있습니다. 그것들의 기능이 그것을 허용하거나 않하거나는 또다른 문제이지만, 표준은 그것을 강요하지 않습니다. 신호 다툼을 피하기 위해 두 디바이스는 사용하기 전에 버스에 대해 조정해야 합니다.
SCSI의 철학은 오래된-표준 디바이스가 새로운-표준의 것과 같이 동작하게 하는 표준을 마련하는 것입니다. 그래서, 오래된 SCSI-1 디바이스는 SCSI-2 버스에서도 보통 동작을 할 것입니다. 보통이라고 한 것은 오래된 장치의 구현이 새로운 버스에 정말로 적합한 (오래된) 표준을 따르고 있는지 절대적으로 확신하지 못하기 때문입니다. 근래의 디바이스들은 표준화가 더욱 엄격하게 되어있으며 디바이스 제조업자에 의해 더욱 잘 지켜지기에 보통 더 잘 동작합니다.
일반적으로 말해서, 단일 버스에서 디바이스의 작동 셋을 얻는 기회는 모든 디바이스가 SCSI-2이거나 그 이후의 것일 때 더욱 좋습니다. 이는 반짝반짝 빛나는 2GB 디스크를 구했을 때 오래된 기기를 내다버려야 한다고 말하는 것은 아닙니다: 필자의 경우를 보아도 pre-SCSI-1 디스크, SCSI-2 QIC 테이프 유닛, SCSI-1 helical 스캔 테이프 유닛, 그리고 2개의 SCSI-1 디스크가 한 시스템에서 그런데로 잘 동작하고 있습니다. 그러나 성능을 염두에 둔다면 오래된 디바이스와 새로운 (=더 빠른) 디바이스를 분리하는 것이 더 낳을 수도 있습니다.
12.5.2.1. SCSI의 구성
앞에서 말한 바와 같이, SCSI 디바이스들은 지능적입니다. 아이디어는 SCSI 디바이스 자체에 깊숙한 하드웨어 세부에 대한 지식을 집어넣는 것입니다. 이 방법으로, 호스트 시스템은 하드 디스크가 얼마나 많은 헤드를 가지고 있는지, 특정 테이프 디바이스에 얼마나 많은 트랙이 있는지와 같은 걱정은 할 필요가 없습니다. 궁금함을 참지못하는 이를 위해 설명을 하자면, 표준은 하드웨어의 상세한 부분에 대해 디바이스에 질의하는 명령어를 정해놓고 있습니다. FreeBSD는 부팅시에 어떤 장치가 연결이 되어있는지 그것이 특정한 처리를 필요로하는지 안하는지 검사하기 위해 이러한 능력을 이용합니다.
지능적인 디바이스의 이점은 확연합니다: 호스트에서의 디바이스 드라이버를 훨씬 더 일반화된 형태로 만들 수가 있고, 더이상 소개되는 모든 기묘한 새 디바이스에 대해 드라이버를 변경할 (그리고 최적화할!) 필요가 없습니다.
케이블과 커넥터에 대해 황금률이 있습니다: 좋은 기기로 구하라는 것입니다. 좋은 재료를 사용하는 것이 버스 스피드를 높이게 되므로 항상 고통을 덜어드릴 것입니다.
그래서, 금도금된 커넥터, 보호처리된 케이블, 변형 방지를 가진 튼튼한 커넥터 후드(덮개) 등이 잘 팔리는 이유입니다. 두번째 황금률: 필요이상 긴 케이블을 쓰지 말라는 것입니다. 필자의 경우를 예로 들자면 한 괴짜 컴퓨터에서 발생한 문제를 잡는데 있어 단지 SCSI 버스 길이를 1m로 줄이는 것으로 해결된다는 것을 발견하는데 3일이 걸렸습니다. 그리고 원래의 버스 길이는 SCSI 스펙 상에서 잘 (정의) 되어있습니다.
12.5.2.2. SCSI 버스의 종류
전자공학적 관점에 의하면, 두가지 비호환 버스 형태가 있습니다: 단일-종단형(single-ended)과 차동형(differential). 이는 SCSI 장치와 컨트롤러에 두가지 다른 주요 그룹이 있다는 것을 의미합니다, 이들은 동일한 버스에 섞일 수 없습니다. 그러나, 특별한 변환기 하드웨어를 사용해서 단일-종단형 버스에서 차동형의 것으로 전송하는 것이 (그리고 역으로도) 가능합니다. 버스 타입의 차이점은 다음에 설명합니다.
SCSI와 연관된 많은 문서에서 각가지 버스 종류를 축약해서 사용하는 전문용어의 종류가 있습니다. 조금만 소개하면:
FWD: Fast Wide Differential
FND: Fast Narrow Differential
SE: Single Ended
FN: Fast Narrow
등등.
조금만 생각해보면 무엇을 뜻하는 지는 쉽게 알 수 있습니다.
와이드(wide)란 말은 좀 모호합니다, 이는 16 또는 32 bit 버스를 지칭할 수 있습니다. 그러나, 32 bit 류는 (아직) 사용되지 있지 않습니다. 그래서 와이드는 보통 16 bit를 지칭합니다.
패스트(fast)라는 것은 버스에서의 타이밍이 다소 다름을 의미하는데, 내로우(narrow) (8 bit) 버스에서 '느린' SCSI의 5MB/s 대신 10MB/s가 가능합니다. 앞에서 말한 바와 같이, 초당 2000만 4000만 단위로 전송하는 버스 스피드도 생겨나고 있습니다. (Fast-20 == Ultra SCSI, Fast-40 == Ultra2 SCSI)
8번째 이후 데이터 라인(line)은 오직 데이터 전송과 장치의 어드레싱(addressing)에만 쓰인다는 것을 주의하십시오. 명령어와 상태 메세지 등의 전송은 오직 하위 8개의 데이터 라인에서 수행됩니다. 표준은 내로우 디바이스들이 와이드 버스에서 작동토록 하고 있습니다. 유효 버스 폭은 디바이스간에도 성립됩니다. 와이드와 내로우가 섞여있을 때 분명히 디바이스 어드레싱을 살펴보아야 합니다.
단일-종단형 버스(single ended buses)
단일-종단형 SCSI 버스는 5V 또는 0V (사실, TTL 수준), 그리고 *일반* 접지 참조(COMMON ground reference)와 연관있는 시그널을 사용합니다. 단일 종단형 8 bit SCSI 버스는 대체로 25개의 접지 라인을 가지고 있는데, 그것은 모든 디바이스에 단일한 `레일(rail)'로 묶여있습니다. 표준 단일 종단 버스는 최대 6m까지 가능합니다. 동일한 버스에 Fast-SCSI 디바이스를 사용하는 경우 최대 3m까지 허용합니다. Fast-SCSI는 5MB/s대신 버스가 10MB/s의 전송량을 허용하는 것을 의미합니다.
Fast-20 (Ultra SCSI)와 Fast-40은 각각 초당 2000, 4000만 단위의 전송량을 허용합니다. 그래서 F20은 8 bit 버스에서 20MB/s, 16 bit 버스에서 40MB/s 등을 허용하게 됩니다. 그리고, F20에 경우 최대 1.5m, F40 경우 0.75m의 버스길이가 허용됩니다. F20은 상당히 한계를 압박한다는 것을 알아두십시오, SCSI 버스가 전기적으로 올바른가 빨리 알 수 있습니다.
이는 버스의 몇몇 디바이스가 통신하기 위해 '패스트'를 사용한다면 버스는 빠른 버스를 위해 길이 제한을 철저히 지켜야한다는 것을 주의하라는 것입니다.
최근의 fast-SCSI 디바이스에서 버스 길이가 실제로 병목 현상을 일으킬 수 있음이 분명합니다. 이는 차동형 SCSI가 SCSI-2 표준에서 소개된 이유입니다.
커넥터 핀과 커넥터 유형에 대해서는 SCSI-2 표준 자체를 ( 추가 사항을 보십시오) 참조하십시오, 커넥터 등이 그 부분에 정말 자세히 설명해 놓고 있습니다.
비표준 케이블을 사용하는 디바이스에 대해 인지하고 계셔야 합니다. 예를 들어 Apple은 25핀 D-type 커넥터를 (직렬포트와 병렬 프린터에서의 그것과 같은) 사용합니다. 공식적인픓CSI 버스는 50핀을 사용한다는 것을 고려해볼 적에 이 커넥터의 사용은 몇가지 '독창적인 케이블 연결'을 필요로 한다것을 상상할 수 있습니다. 그와 같은 접지선(ground wire) 수의 절약은 어리석은 생각입니다, SCSI 표준과 일치하는 50핀 케이블로 연결하는 것을 지키는 것이 좋습니다. Fast-20과 40에서는 이와같은 버스는 고려조차 하고 있지 않습니다.
차동형 버스(Differential buses)
차동형 SCSI 버스 길이는 최대 25m까지 가능합니다. 단일-종단형 패스트-SCSI 버스의 3m와는 꽤 다르지요. 차동 신호의 아이디어는 각각의 버스 신호가 자신만의 회신 와이어(wire)를 가진다는 것입니다. 그래서, 각각의 신호는 (완전히 꼬여있는) 전선 뭉치로 전송됩니다. 이 두 선의 사이의 전압 차이는 신호가 사용중(asserted)인지 아니면 그렇지 않은지 검사합니다. 접지선과 신호선 간의 전압차이는 그다지 관계없습니다. (그렇더라도 10 kV 정도는 시도하지 마십시오)
이 차동형의 개념이 왜 뛰어난 것인지 설명하는 것은 이 문서의 범위를 넘어섭니다. 단지 차동 신호의 사용이 전기적으로 훨씬 더 노이즈를 줄여주는 것으로 보인다는 것을 받아들이십시오. 케비넷끼리 연결하는데 보통 차동형 버스를 볼 수 있을 것입니다. 단일종단형은 비용이 적게 들기 때문에 내부 케비넷과 같은 대체로 상당히 짧은 버스에 사용됩니다.
FreeBSD에서 디바이스 드라이버 지원을 하는 장치를 사용하는 한, 차동형 제품의 사용을 막을 이유가 없습니다. 예를 들어, Adaptec에서는 단일 종단형 기판으로 AHA1740을 판매했습니다만, 반면에 AHA1744는 차동형이었습니다. 호스트에 대한 소프트웨어 인터페이스는 둘다 동일합니다.
터미네이터(Terminators)
SCSI 전문용어로 터미네이터는 올바른 저항 배합(impedance matching)을 얻기위해 사용되는 저항회로(resistor networks)입니다. 저항 매칭은 버스에서 반사(reflections)나, 울림(ringing)이 없는 깨끗한 신호를 얻는데 중요합니다. 그리 좋지 않은 전화선으로 먼 거리의 전화를 설치했다면 아마도 반사가 무엇인지 알 것입니다. SCSI 버스에서 20MB/s의 전송속도를 얻으려면, 신호 메아리가 울리는 것을 원치는 않을 것입니다.
터미네이터는 다소 복잡한 디자인으로, 다양한 형태가 있습니다. 물론, 내부적으로 외부적으로도 그러합니다. 많은 SCSI 디바이스는 다수의 저항회로가 (반드시!) 설치되어있는 다수의 소켓으로 되어있습니다. 디바이스에서 터미네이터를 제거할 때, 조심스럽게 그것을 보관하십시오. SCSI 버스를 다시 구성하기로 했을 때, 그것이 필요할 것입니다. 정확한 대체품을 찾는 것이 전혀 불필요한 이 아 간단하고 조금한 것에도 다양한 것들이 있습니다. 또한 자체 테미네이터를 작동시키거나 않게하는 단일 점퍼를 가지고 있는 SCSI 장치도 있습니다. 플랫(flat) 케이블 버스에다가 꽂는 특별한 터미네이터도 있습니다. 외부 커넥터와 같은 것, 케이블이 없는 커넥터 후드와 같은 것도 있습니다. 찾아보면 매우 다양한 선택을 할 수 있습니다.
간단한 저항 (수동(passive)) 터미네이터에서 자동(active) 터미네이터로의 교체를 계획하거나 교체할 때 숙고해야 할 것이 있습니다. 자동 터미네이터는 깨끗한 버스 시그널을 주기위한 약간 더 복잡한 회로를 가지고 있습니다. 일반적으로 긴 버스 그리고/또는 빠른 디바이스를 사용할 때, 자동 터미네이션의 유용성이 증가한다고 평가하고 있습니다. SCSI 버스에 문제가 있을 시, 자동 터미네이터에 대해 고려해보는 것이 좋습니다. 최초의 도입 시에, 들리는 바에 따르면 상당한 비용이 든다고 합니다.
차동형과 단일-종단형 버스에 따른 터미네이터가 동일하지 않다는 것을 염두에 두십시오. 두 가지가 *섞여서는 않됩니다.*
좋습니다, 그럼 지금 어디에다 터미네이터를 장착하셨습니까? 이는 많은 이들이 SCSI에 대해 오해하는 부분입니다. 그에 비해 가장 간단한 것이기도 합니다. 원칙은: *SCSI 버스에서 모든 한 라인은 버스의 양끝에 하나씩, 2개의 터미네이터를 가진다는 것입니다.* 그래서 두개, 하나도, 세개도, 다른 어떤 것도 아닙니다. 충실히 이 원칙을 지키도록 하십시오. 그렇게 하는 것으로 끝없는 고통에서 벗어날 수 있을 것입니다, 잘못된 터미네이션은 전혀 알 수 없는 버그를 유발 할 수 있는 잠재력을 지녔기 때문이랍니다. (여기서 "잠재력"에 주의하십시오; 이 애매함은 일어날 수도 안일어날 수도 있음을 나타내는 것입니다.)
일반적인 함정은 컴퓨터 안에 내부 (플랫) 케이블이 그리고 컨트롤러에 부착되는 외부 케이블이 있다는 점입니다. 이는 컨트롤러에 있는 터미네이터를 제거해야한다는 생각을 대부분의 경우 잊어버리게 합니다. 이같은 경우 터미네이터는 컨트롤러가 아닌, 가장 마지막 외부 디바이스에 있어야 합니다! 일반적으로 SCSI 버스를 재조정할 때 항상 반드시 이에 주의를 기울여야 합니다.
터미네이션은 각각의 라인(line)을 바탕으로 되어야 한다는 점을 주의하십시오. 이는 동일 호스트 어댑터에 내로우(narrow)와 와이드(wide)가 같이 연결되어있다면 어댑터에 버스의 상위 8 bit에 대한 터미네이션을 해주어야 한다는 것입니다. (물론, 각 버스의 마지막 디바이스도 해주는 것은 당연합니다.)
필자가 행한 방식을 소개하자면, 일단 SCSI 디바이스와 컨트롤러에 있는 모든 터미네이터를 제거합니다. 필자는 외부 터미네이터를 두개 가지고 있는데, 모두 동심형 외부 케이블, 내부 플랫(flat) 케이블 커넥터에 연결하는 것입니다. 이는 재설정을 훨씬 쉽게 해 줄겁니다.
근래의 디바이스에서, 때때로 통합된 터미네이터가 사용됩니다. 이것들은 제어핀으로 설정/해제를 할 수 있는 특수 목적의 통합 회로입니다. 이는 디바이스에서 물리적으로 꼭 제거할 필요가 없습니다. 최신의 호스트 어댑터에서 이런 것을 볼 수 있는데, 때로는 일종의 설정툴을 사용해서 소프트웨어 설정이 가능합니다. 또 일부는 커넥터에 부착된 케이블을 자동으로 인식을 하고 자동으로 필요한 터미네이션을 설정합니다. 여하튼 제품 설명서를 잘 살펴보시기 바랍니다!
터미네이터 파워(Terminator power)
앞에서 얘기한 터미네이터가 정상적으로 작동케할 파워가 필요합니다. SCSI 버스에서, 라인은 이 목적에 부합되어 있다. 허, 그렇게 간단할까요?
그렇지가 않습니다. 각각의 디바이스는 디바이스에 장착되어있는 터미네이터 소켓에 터미네이터 파워를 제공할 수 있습니다. 하지만, 이미 외부 터미네이터가 있거나, SCSI 버스 라인에 터미네이터 파워를 공급하는 디바이스가 꺼져있다면 곤란하겠지요.
아이디어는 이니티에이터(initiator)들은 (이것들은 버스에서 동작을 시작하는 디바이스입니다, 뒤에 설명이 나옵니다.) 반드시 터미네이터 파워를 공급해야 한다는 것입니다. 모든 SCSI 디바이스들은 (반드시는 아니고) 터미네이터 파워를 공급할 수 있게 되어 있습니다.
버스에서 파워가 공급되지 않는 디바이스를 고려해, 터미네이터 파워는 반드시 다이오드를 통해 버스에 공급이 되어야 합니다. 이는 파워가 공급되지 않는 디바이스에 역류를 방지하기 위해서입니다.
모든 종류의 노이즈(nastiness)를 예방하기 위해, 터미네이터 파워는 잘 접지가 되어있습니다. 생각해 보았겠지만, 퓨즈는 끊어질 수 있습니다. 이는 그럴 수도 있지만, 그래서는 않되는, 동작하지 않는 버스가 되어버릴 것입니다. 복수의 디바이스가 터미네이터 파워를 공급하는 경우는, 하나정도 끊어진 퓨즈는 문제가 되지 않을 것입니다. 문제는 바로, 퓨즈가 끊어진 단일 공급장치에서 입니다. 때때로 영리한 외부 터미네이터들은 터미네이터 파워가 공급되고 있는지를 보여주는 LED 표식을 가지고 있습니다.
최근의 디자인에서 때때로 얼마 후 그것들을 '재설정'하는 자동-저장 퓨즈가 사용되고 있습니다.
디바이스 어드레싱(Device addressing)
SCSI 버스는, 에, 버스이기에 각각의 디바이스가 그것에 연결된 다른 디바이스간에 구분 또는 어드레싱(addressing)을 할 방법이 있어야 합니다.
이는 SCSI 또는 타겟 ID으로 해결됩니다. 각각의 디바이스는 유일한 타겟 ID를 가집니다. 점퍼를 설정하거나, 딥(dip) 스위치, 여타의 유사한 것을 사용해서 디바이스가 응답해야할 ID를 고를 수 있습니다. 일부의 SCSI 호스트 어댑터는 부트 메뉴에서 타겟 ID를 바꾸게 해줍니다. (아직 다른 것들은 타겟 ID를 7외의 것으로 바꿀 수 없습니다.(Some others will not let you change a target ID from 7)) 더 자세한 사항은 디바이스의 설명서를 보시기 바랍니다.
동일한 ID를 사용토록 설정된 다수의 디바이스를 조심하십시오. 보통 이 경우 대혼란을 초래할 것입니다. 문제는 때때로 동일한 ID를 공유하는 디바이스중 하나가 입출력 요구를 응답하려고 한다는 것입니다.
8 bit 버스에서는, 최대 8개의 타겟이 가능합니다. 최대가 8인 이유는 버스에 8개의 데이타 라인을 사용하는 bit폭으로 선택이 이루어지기 때문입니다. 와이드 버스의 경우 데이터 라인의 수에 따라 이것도 증가하게 됩니다 (보통 16).
내로우 SCSI 디바이스는 7보다 큰 타겟 ID의 SCSI 디바이스와는 교류할 수 없음을 주의하십시오. 이는 SCSI 호스트 어댑터의 타겟 ID를 7보다 큰 어떤 값으로 바꾸는 것이 그리 좋은 생각이 아님을 의미합니다. (그렇지 않으면 CD-ROM 같은 것은 동작을 멈추게 될 것입니다.)
더 높은 SCSI 타겟 ID를 가질 수록 디바이스는 더 높은 우선순위를 가지게 됩니다. 동시에 버스를 사용하려는 디바이스들을 조정할 때, 가장 높은 SCSI ID를 가진 디바이스가 우선권을 가집니다. 이는 또한 SCSI 호스트 어댑터가 보통 타겟 ID 7을 가지는 이유이기도 합니다. 그러나 wide-SCSI 버스에서 상위 8개의 ID보다는 낮은 8개의 ID가 더 높은 우선순위를 가지고 있습니다. 이렇게해서, wide-SCSI 시스템에서 타겟 ID의 순위는: [7 6 .. 1 0 15 14 .. 9 8] 순으로 됩니다. (왜 낮은 8개가 더 높은 우선순위를 가지는지 이해하지 못한다면, 힌트로 앞문장을 살펴보십시오.)
추가로, 표준은 논리 단위(Logical Units) 또는 짧게 LUN이라는 것을 고려하고 있습니다. 단일한 타겟 ID는 다수의 LUN을 가질 수 있습니다. 예를 들어, 테이프 교환기를 포함한 테이프 디바이스는 테이프 디바이스 자체에 LUN 0를 가지고, 테이프 교환기에 LUN 1을 가지게 할 수 있습니다. 이러한 방법으로 호스트 시스템은 희망하는 대로 테이프 교환기의 동작 단위마다 어드레싱(addressing)할 수 있습니다.
버스 배치
SCSI 버스는 선형입니다. 그래서, Y-접합, 별모양, 반지형, 거미집형 또는 인간이 만들어낸 여타의 어느 형태도 않됩니다. 일반적으로 일어나는 대부분의 실수 중 하나는 wide-SCSI 호스트 어댑터일 때 세개의 커넥터 (외부 커넥터, 내부 와이드 커넥터, 내부 내로우 케넥터) 전부에다 디바이스를 연결하는 것입니다. 그렇게 하는 것이 아닙니다. 이는 운이 정말로 좋으면 작동하는 것처럼 보일 수도 있지만, 확신하기를, 대단히 불운한 순간에 시스템이 동작을 멈추게 될 것입니다. (이게 바로 "머피의 법칙"이라고 알려져 있지요.)
버스가 선형이 아니라면, 앞에서 논의된 터미네이터 문제가 심각해진다는 것에 주의하십시오. 또한, 내부 SCSI 케이블에 디바이스보다 더 많은 커넥터가 있다면, 중간에 있는 커넥터를 사용하는 대신에 양끝 커넥터에 디바이스가 부착되어있는지 확인하고 한쪽이나 양쪽 끝에다 매달도록 하십시오. 이는 버스의 터미네이션조차 해결시켜 줄 것입니다.
전기적 특성상, 이것의 깨끗한 신호, 궁극적으로 신뢰성은 선형 버스 법칙에 좌우됩니다.
*선형 버스 법칙을 꼭 지키십시오!*
12.5.2.3. FreeBSD에서 SCSI 사용하기
변환, BIOS, 그리고 마법에 대해서...
앞에서 했던대로, 먼저 전기적으로 올바른 버스인지를 확인하십시오.
부트 디스크로 PC에서 SCSI 디스크를 사용하려고 할 때, PC BIOS와 관련된 몇가지 변덕에 대해 알고 있어야 합니다. 초창기 PC BIOS는 하드 디스크에 대해 저수준의 물리적 인터페이스를 사용했습니다. 그래서, (설정 툴이나 BIOS 내장 설정 프로그램을 이용해서) 디스크가 물리적으로 어떤지 BIOS에 알려 주어야 했습니다. 이는 헤드의 수, 실린더 수, 트랙당 섹터 수, 그리고 선행 보정과 감소한 현재 쓸 수 있는 실린더 (reduced write currnet cylinder) 등 불명확한 것들을 설명하는 것을 포함합니다.
누군가 SCSI 디스크는 영리하기에 이에 대해 잊고 지낼 수 있다는 것을 생각해냈는지도 모르습니다. 저런, 난해한 설정이라는 것은 오늘날에도 여전히 현존하고 있습니다. 시스템 BIOS는 부팅하는 동안 FreeBSD 커널을 읽어들이기 위해 헤드/실린더/섹터 순서로 어떻게 SCSI 디스크를 억세스할 수 있는지 알 필요가 있습니다.
그리해서 디스크를 연결한 AT/EISA/PCI/다른 어떤 버스에다 설치한 SCSI 호스트 어댑터나 SCSI 컨트롤러는 자체에 내장한 BIOS를 가지고 있는 것입니다. 시스템이 동작을 시작할 때, SCSI BIOS는 시스템 BIOS에서 하드 디스크 인터페이스 부분을 넘겨받습니다. 시스템 BIOS를 속이기위해, 시스템 설정은 보통 하드 디스크가 없는 것으로 합니다. 당연히, 그렇지 않지요?
존재합니다. 이는 PC가 드라이브를 부팅하게하는 가짜 드라이브 테이블이 구성되었음을 의미합니다. 이 변환은 자주 (항상은 아니지만) 64개의 헤드와 트랙당 32개의 섹터를 가진 가상 드라이브을 사용해 왔습니다. 실린더의 수를 바꿈으로써, SCSI BIOS는 실제 드라이브 크기에 맞춰집니다. 32 * 64 / 2 = MB 단위로 드라이브의 크기라는 것을 주의하는 것이 좋습니다. 2로 나누는 것은 크기가 512B를 디스크 블럭으로부터 KB로 환산하는 것입니다.
좋습니다. 모든 것이 지금 잘 될까요? 아니요, 그렇지 않습니다. 시스템 BIOS는 뛰어들어야 할 또다른 괴벽이 있습니다. 부팅할 수 있는 하드 디스크의 실린더 수는 1024보다 클 수가 없습니다. 위의 변환을 사용해서, 1GB보다 큰 디스크에 대해서는 이는 거대한 벽이 아닐 수 없습니다. 지속적으로 디스크의 용량이 커짐에 따라 이는 문제가 되고 있습니다.
다행이도, 해결은 간단합니다: 단지 또다른 변환을 사용하면 됩니다, 예를 들어, 32개 대신에 128개의 헤드. 대부분의 경우 오래된 SCSI 호스트 어댑터를 업그레이드하도록 새로운 SCSI BIOS 버전이 마련되어 있습니다. 일부 최근 어댑터는 SCSI BIOS가 사용할 변환을 바꾸는 점퍼나 소프트웨어 설정 선택과 같은 옵션이 있있습니다.
디스크에 있는 *모든* OS들은 적절한 파티션을 어디서 찾을 수 있을지에 대해 올바른 인식을 얻기 위해 *동일한 변환*을 사용한다는 것은 대단히 중요합니다. 그래서, FreeBSD를 설치할 때 호스트 어댑터가 사용하는 변환된 값을 사용한 헤드/실린더 등에 대해 어떤 질문이든 답해야 합니다.
변환 결과에 대해 탐색하는데 실패하는 이유는 부팅할 수 없는 시스템이거나 각각 다른 파티션을 덮어쓰는 OS때문입니다. fdisk를 사용해서 모든 파티션을 찾아볼 수 있어야 합니다.
'장착된' 디스크에 대해 들어본 적이 있습니까? 오래된 FreeBSD 커널은 부팅할 때 SCSI 디스크의 구조를 보고하곤 했습니다. 필자의 시스템을 예로 들면:
aha0 targ 0 lun 0: <MICROP 1588-15MB1057404HSP4>
sd0: 636MB (1303250 total sec), 1632 cyl, 15 head, 53 sec, bytes/sec 512
새로운 커널은 보통 위의 정보를 보고하지 않습니다. 예로,
(bt0:0:0): "SEAGATE ST41651 7574" type 0 fixed SCSI 2
sd0(bt0:0:0): Direct-Access 1350MB (2766300 512 byte sectors)
왜 이렇게 바뀌었을까요?
이 정보는 SCSI 디스크 자체에서 검색된 것입니다. 새로운 디스크는 자주 zone bit recording이라는 기술을 사용합니다. 이 기술의 기반은 드라이브의 실린더 외곽에 공간이 더 많아서 그 자리에 더많은 트랙당 섹터가 들어갈 수 있다는 것입니다. 안쪽보다 바깥쪽 실린더가 더 많은 트랙을 가지는 디스크에서 성과는, 마지막으로 말하건데, 더 많은 용량을 가지게 된다는 것입니다. 형태(geometry)에 대해 질의할 때 드라이브에 의해 보고된 값은 현재 최상의 상태에 맞춰지게 되고, 거의 항상 오류를 포함하고 있습니다. 형태에 대해 물어 보았을 때, 거의 항상 BIOS에서 사용된 형태를 제공하는 것이 오히려 더 나으며, *BIOS가 이 디스크에 대해 알 수 없게 된다면*, (예를 들어, 이것이 부팅한 디스크가 아닌 경우) 편리한 대로 허구의 형태를 제공하는 것이 더 좋습니다.
SCSI 하부구조 디자인(SCSI subsystem design)
FreeBSD는 여러번 겹쳐진 SCSI 하부구조를 사용합니다. 각각 다른 컨트롤러 카드에 대해 디바이스 드라이가 작성됩니다. 이 드라이버는 제어할 하드웨어에 대해서 모든 세부적인 것을 알고 있습니다. 이 드라이버는 명령어를 받고 어떤 상태를 되돌려 보내는 식의 SCSI 하부구조의 상층에 대한 인터페이스를 갖추고 있습니다.
카드 드라이버의 최상층에는 디바이스의 계층에서 더욱 일반적인 드라이버들이 있습니다. 더 자세히 말해서: 테이프 디바이스에 대한 드라이버 (축약: st), 자기 디스크 (sd), CD-ROM (cd) 등등. 이 자료를 어디서 얻을 수 있는지 궁금한 경우에, /sys/scsi를 찾아보십시오. 더 자세한 사항에 대해서는 매뉴얼 페이지 섹션 4를 보도록 하십시오.
복수의 레벨 디자인은 저수준의 비트 충돌(bit banging)과 고수준 자료의 분리가 가능합니다. 하드웨어의 또다른 기기 지원을 추가하는 것은 훨씬 더 처리하기 쉬운 문제입니다.
커널 설정
하드웨어에 따라, 커널 설정 파일은 반드시 해당 호스트 어댑터를 기술한 하나 또는 여러 라인을 포함해야 합니다. 이는 I/O 어드레스, 인터럽트 등을 포함합니다. 추가 정보를 얻으러면 해당 호스트 어댑터의 메뉴얼 페이지를 잘 살펴 보십시오. 이와는 달리, 커널 설정 파일의 전반에 대해서는 /sys/i386/conf/LINT를 검토하십시오. LINT는 해볼 수 있는 모든 가능한 옵션을 포함하고 있습니다. 이는 실제로 동작하는 커널을 제공하는 것은 *아닙니다.*
그럼에도 아마 분명히 말할 수 있는 것은: 커널 설정 파일은 실제 하드웨어 설정의 반영이어야 한다는 것입니다. 그래서, 인터럽트, I/O 어드레스 등은 반드시 커널 설정 파일에 맞추어야 합니다. 시스템 부팅시 설정된 하드웨어를 실제로 발견했는지 메시지가 출력될 것입니다. EIAS/PCI 드라이버의 대부분은 (이름하기를 ahb, ahc, ncr, amd) 부팅시 자동으로 호스트 어댑터로부터 자체적으로 올바른 파라메터(parameter)를 얻게 될 것입니다; 그래서, 예를 들자면 "controller ahc0"와 같이 쓰기만 하면 됩니다.
몇가지 추가 주석을 갖춘 FreeABSD 2.2.5-Release 커널 설정 파일 LINT에 기반한 예제 일부 ([] 사이):
# SCSI host adapters: `aha', `ahb', `aic', `bt', `nca'
#
# aha: Adaptec 154x
# ahb: Adaptec 174x
# ahc: Adaptec 274x/284x/294x
# aic: Adaptec 152x and sound cards using the Adaptec AIC-6360 (slow!)
# amd: AMD 53c974 based SCSI cards (e.g., Tekram DC-390 and 390T)
# bt: Most Buslogic controllers
# nca: ProAudioSpectrum cards using the NCR 5380 or Trantor T130
# ncr: NCR/Symbios 53c810/815/825/875 etc based SCSI cards
# uha: UltraStore 14F and 34F
# sea: Seagate ST01/02 8 bit controller (slow!)
# wds: Western Digital WD7000 controller (no scatter/gather!).
#
[For an Adaptec AHA274x/284x/294x/394x etc controller]
controller ahc0
[For an NCR/Symbios 53c875 based controller]
controller ncr0
[For an Ultrastor adapter]
controller uha0 at isa? port "IO_UHA0" bio irq ? drq 5 vector uhaintr
# Map SCSI buses to specific SCSI adapters
controller scbus0 at ahc0
controller scbus2 at ncr0
controller scbus1 at uha0
# The actual SCSI devices
disk sd0 at scbus0 target 0 unit 0 [SCSI disk 0 is at scbus 0, LUN 0]
disk sd1 at scbus0 target 1 [implicit LUN 0 if omitted]
disk sd2 at scbus1 target 3 [SCSI disk on the uha0]
disk sd3 at scbus2 target 4 [SCSI disk on the ncr0]
tape st1 at scbus0 target 6 [SCSI tape at target 6]
device cd0 at scbus? [the first ever CD-ROM found, no wiring]
위의 예제는 커널이 ahc (Adaptec 274x) 컨트롤러, 그후 NCR/Symbios 보드, 등을 찾게 하고 있음을 보여줍니다. 컨트롤러 특성을 담은 라인에서 커널이 특정 디바이스를 설정하게 하고있지만 *오직* 일치하는 버스에서 정해진 타겟 ID와 LUN을 맞을 때에만 부착될 것입니다.
등록된 (wired down) 디바이스는 '등록'되지 않은 디바이스에 앞서서 유닛 넘버에 '우선 순위(first shot)'를 가지게 되는데 이에 '등록'되지 않은 디바이스는 디바이스의 종류에 따라 가장 높은 '등록된' 유닛의 번호보다 더 큰 유닛 번호가 할당됩니다. 그래서, 타겟 ID 6에 테이프가 유닛 넘버(unit number) 1에 i 등록되어있으니, 타겟 ID 2에 SCSI 테이프가 있다면 st2로 설정이 될 것입니다. 유닛 번호를 찾기 위해 *등록된 디바이스는 탐색되어야 할 필요가 없음을* 주의하십시오. 등록된 디바이스의 유닛 번호는, 설사 부팅 시에 켜있지 않았더라도 그 디바이스에 이미 지정됩니다. 이는 디바이스가 리부팅을 하지 않고도 나중에 켜서 사용할 수 있도록 합니다. 디바이스의 유닛 번호는 결코 SCSI 버스 상의 타겟 ID와 연관성이 *없음을* 명심하십시오.
아래에는 FreeBSD 2.0.5 이하 버전에서 사용되는 커널 설정 파일의 예제입니다. 앞 예제와 다른점은 디바이스가 '등록'되지 않았다는 것입니다. 'wired down'이라는 것은 어떤 SCSI 타겟에 어떤 디바이스를 할당하겠는지 정해주는 것을 의미합니다.
아래 설정 파일로 만들어진 커널은 탐색한 첫번째 SCSI 디스크에 sd0를, 두번째 디스크에 sd1 등으로 정해줍니다. 만일 디스크를 제거하거나 추가하는 경우에, 동일한 타입의 디바이스들은 (이 경우 디스크) '옮겨져' 버릴 것입니다. 이는 매번 /etc/fstab를 바꾸어 주어야 한다는 것입니다.
비록 이전 양식으로 여전히 쓸 수 있지만, 위의 새로운 방식으로 쓰기를 *강력하게* 주장합니다. 이는 SCSI 버스에서 하드웨어를 옮길 때마다의 많은 고통을 덜어 줄 것입니다. 그래서, FreeBSD2.0.5.R 이전 시스템에서 업그레이드를 한 후 오래되고도 충실한 설정 파일을 재사용할 때 이를 검토하시기 바랍니다.
[driver for Adaptec 174x]
controller ahb0 at isa? bio irq 11 vector ahbintr
[for Adaptec 154x]
controller aha0 at isa? port "IO_AHA0" bio irq 11 drq 5 vector ahaintr
[for Seagate ST01/02]
controller sea0 at isa? bio irq 5 iomem 0xc8000 iosiz 0x2000 vector seaintr
controller scbus0
device sd0 [support for 4 SCSI harddisks, sd0 up sd3]
device st0 [support for 2 SCSI tapes]
[for the CD-ROM]
device cd0 #Only need one of these, the code dynamically grows
두 예제 모두 SCSI 디스크를 지원합니다. 부팅시에 부팅 커널에서 정해준 것보다 특정 형태의 (예를 들어 sd 디스크) 디바이스가 더 발견이 되면, 시스템은 간단하게 '등록'된 마지막 번호에서 시작하는 유닛 번호를 증가시켜, 추가 디바이스를 할당할 것입니다. '등록'된 디바이스가 없으면, unit 0에서 시작하게 됩니다.
SCSI 하부구조에 대해 최근 정보를 검토하려면 man 4 scsi를 사용하십시오. 호스트 어댑터 드라이버에 대한 보다 자세한 정보에 대해서는 Adaptec 294x 드라이버에 대한 정보인 man 4 ahc 예제를 이용하십시오.
SCSI 커널 설정 조정
(부팅시에 일어난) SCSI 버스 재설정 후 INQUIRY 명령에 대한 응답에 일부 디바이스가 느리다는 실험 결과가 나왔습니다. INQUIRY 명령어는 특정 타겟 ID에 어떤 종류의 디바이스가 (디스크, 테이프, CD-ROM 등) 연결되어있는지 확인하기 위해 부팅시에 커널이 보냅니다. 이 처리는 말이 나온 김에 말하면 디바이스 검사(device probing)라고 불립니다.
'늦은 응답'을 해결하기 위해, FreeBSD는 SCSI 디바이스가 SCSI 버스 재설정을 따라 검사되기 전에 조정할 수 있는 지연 시간을 허용하고 있습니다. 다음과 같은 라인을 커널 설정 파일에 추가해서 이 지연 시간을 설정할 수 있습니다.
options SCSI_DELAY=15 #Be pessimistic about Joe SCSI device
여기서는 지연 시간을 15초로 하고 있습니다. 필자의 시스템의 경우, 충실하고도 오래된 CD-ROM이 인식되기에는 최소 3초가 필요합니다. 디바이스 인식에 문제가 있는 경우 높은 값으로 (30초 쯤으로) 해 보십시오. 이래서 해결이 된다면, 동작이 되게끔 계속 조정하십시오.
부랑자 SCSI 디바이스
비록 SCSI 표준은 완벽하고 간결하고자 하지만, 이는 대단히 복잡한 표준이며 옳게 구현하는 것은 그리 쉬운 일이 아닙니다. 일부의 회사는 다른 곳보다 더좋게 처리하고 있습니다.
이는 정확히 '부랑자' 디바이스가 어디서 보이는가 하는 점입니다. 부랑자란 FreeBSD에서 약간(...) 비표준으로 작동하는 것으로 인식되는 디바이스를 말합니다. 부랑자 디바이스는 부팅시 커널에서 보고합니다. 필자의 카트리지 유닛 두개에 대한 예제입니다:
Feb 25 21:03:34 yedi /kernel: ahb0 targ 5 lun 0: <TANDBERG TDC 3600 -06:>
Feb 25 21:03:34 yedi /kernel: st0: Tandberg tdc3600 is a known rogue
Mar 29 21:16:37 yedi /kernel: aha0 targ 5 lun 0: <ARCHIVE VIPER 150 21247-005>
Mar 29 21:16:37 yedi /kernel: st1: Archive Viper 150 is a known rogue
예를 들어, 실제로는 오직 하나의 디바이스임에도, 어떤 타겟 ID에서 모든 LUN으로 응답하는 디바이스가 있습니다. 커널이 그 특정 타겟 ID에 8개의 LUN이 있다고 믿는 어리석은 짓을 하는 것을 보는 것은 쉽습니다. 이것이 일으킨 혼동을 예상하는 것은 독자에게 맏기겠습니다.
FreeBSD의 SCSI 하부구조는 검색시 그것들이 보내는 INQUIRY 응답을 찾는 그리 안좋은 기법으로 디바이스를 인식합니다. INQUIRY 응답은 또한 디바이스 펌웨어 버전 번호도 포함하고 있어, 다른 펌웨어 버전에 대해 다른 동작기반이 사용될 수도 있습니다. 위의 것이 어떻게 동작하는 지에 대한 더 자세한 정보는 예제 /sys/scsi/st.c와 /sys/scsi/scsiconf.c을 참고하십시오.
이 구성은 잘 동작하지만, 또한 이는 기묘하다고 *알려진* 디바이스도 동작한다는 것을 염두에 두십시오. 우선 엉터리 Mumbletech SCSI CD-ROM을 연결하고자 하면 필요한 동작기반을 정의해야만 할 것입니다.
Mumbletech가 작동한다면, FreeBSD의 다음 배포본에 추가하겠으니 FreeBSD 개발팀에 요구된 동작기반을 보내주셨으면 합니다. 다른 Mumbletech 소유자들이 당신에게 대단히 고마워할 것입니다.
복수의 LUN 디바이스
가끔 하나의 SCSI ID에 복수의 논리 유닛을 (LUN) 사용하는 디바이스를 다루기도 할 것입니다. 대부분의 경우 FreeBSD는 오직 LUN 0에 대한 디바이스만을 인식합니다. SCSI 버스에 SCSI 방식이 아닌 하드디스크 두개를 연결시켜주는 브릿지 보드와 (예로, 오래된 Sun 시스템에 들어있는 Emulex MD21) 같은 경우를 말합니다.
이는 LUN이 0이 아닌 다른 디바이스들은 시스템이 부팅 때, 디바이스 인식과정에서 정상적으로 발견되지 않는다는 것을 뜻합니다. 이 문제를 해결하려면 반드시 /sys/scsi/scsiconf.c에 적절한 엔트리를 추가해서 커널을 다시 만들어야 합니다.
아래와 같이 초기화된 구조를 보십시오:
{
T_DIRECT, T_FIXED, "MAXTOR", "XT-4170S", "B5A",
"mx1", SC_ONE_LU
}
하나 이상의 LUN을 가지고 있고, SCSI 하드로 작동하며, 펌웨어 리비전(revision)이 123을 가지고 있는 Mumbletech BRIDGE2000의 경우, 다음의 것들을 추가해야합니다:
{
T_DIRECT, T_FIXED, "MUMBLETECH", "BRIDGE2000", "123",
"sd", SC_MORE_LUS
}
부팅 시 커널은 테이블에서 받은 질의 데이터를 찾고 그에 따라 동작합니다. 더 자세한 것은 소스를 보도록 하십시오.
덧붙인 명령어 큐잉(Tagged command queueing)
근래의 SCSI 디바이스는, 특히 자기 디스크는 덧붙인 명령어 큐잉 (tagged comand queuing) (TCQ) 라는 것을 지원합니다.
간략하자면, TCQ는 디바이스가 동시에 다수의 I/O 요구가 발생하는 것을 허용합니다. 디바이스는 지능적이기에, 자신의 요구 큐에 기반한 그 동작을 (헤드 위치지정과 같은) 최적화할 수 있습니다. RAID (Redundant Array of Independent Disk) 어레이와 같은 SCSI 디바이스에서 TCQ 기능은 디바이스의 타고난 병렬주의를 이용할 때 없어서는 곤란할 정도입니다.
각각의 I/O 요구는 '태그'에 의해 (그러니가, 이름하기를 tagged command queuing) 유일하게 명시되고 이 태크는 FreeBSD에서 디바이스 드라이버 큐에서 어떤 I/O이 디바이스가 완벽하다고 보고하는지 찾기위해 사용됩니다.
그러나, TCQ는 디바이스 드라이버가 지원해야 한다는 것과 일부 디바이스는 펌웨어에서 '충실하지 않게' 구현하고 있음을 반드시 숙지하고 있어야 합니다. 이 문제는 필자를 골치아프게 하고 있으며, 대단히 이해할 수 없는 문제를 야기하고 있습니다. 그런 경우라면, TCQ를 사용하지 마십시오.
버스마스터 호스트 어댑터
대부분, 다는 아니지만, SCSI 호스트 어댑터는 버스 마스터링 컨트롤러입니다. 이는 데이터 전송에 있어서 호스트 CPU 부하를 가중하지 않고 자체적으로 I/O을 할 수 있다는 것입니다.
이는 물론 FreeBSD 같은 멀티테스킹 OS에서 이득이 됩니다. 그러나, 좀은 불완전한 부분이 있음을 주의해야 합니다.
예를 들자면 Adaptec 1542 컨트롤러는 호스트 버스에 (이 경우 ISA 또는 AT) 다른 전송 속도를 설정해 줄 수 있습니다. 컨트롤러는 모든 마더보드가 더 높은 속도를 관리할 수 있는 것은 아니기에 다른 비율로 설정할 수 있도록 해놓았습니다. 연결 장애, 올바르지 않은 데이터 같은 문제는 마더보드가 소화할 수 있는 전송속도보다 더 높은 속도를 사용할 때의 결과입니다.
해결은 물론 명백합니다: 더 낮은 전송률로 바꾸고 더 잘 작동하는지 검사하는 것입니다.
Adaptec 1542와 같은 경우, 가능한 가장 빠른 전송률의 쓰기, 읽기를 동적으로 검사하도록 커널 설정 파일에 넣을 수 있는 옵션이 있습니다. 기본적으로 이 옵션은 설정되어 있지 않습니다:
options "TUNE_1542" #dynamic tune of bus DMA speed
사용하는 호스트 어댑터에 대한 메뉴얼 페이지를 검사하십시오. 더 나은 방법으로, 궁극의 문서를 (드라이버 소스를 읽으세요) 사용하십시오.
12.5.2.4. 문제의 추적
다음의 목록은 대부분 일반적인 SCSI 문제와 그 해결에 대한 지침을 주기 위한 시도입니다. 이것은 완벽하고는 거리가 멉니다.
느슨한 커넉터와 케이블을 검사하십시오.
터미네이션의 위치와 숫자를 검사 또 검사하십시오.
적어도 하나의 터미네이터 파워 공급장치가 (특히 외장 터미네이터) 있는지 검사하십시오.
타겟 ID가 겹치게 사용되지는 않은지 검사하십시오.
사용되는 모든 디바이스가 켜져있는지 확인하십시오.
가능한 적은 디바이스에 맞춰 최소한의 버스 설정을 만드십시오.
가능하다면 호스트 어댑터가 느린 버스 스피드를 사용하도록 설정하십시오.
가능한 간단하게 구성하기 위해 TCQ 기능을 사용하지 마십시오 (시스템에 기반한 NCR 호스트어댑터에 대해서는 man ncrcontrol을 해 보십시오)
커널 컴파일을 할 수 있으면, SCSIDEBUG 옵션을 넣은 것을 하나 만들고, 그 디바이스에 대한 돌려진 디버깅에서 디바이스를 억세스 하도록 해보십시오. 시작시에 디바이스가 전혀 인식이 않되면, 실패한 디바이스의 주소를 정의해야할수도, 그리고 /sys/scsi/scsidebug.h에 희망하는 디버그 수준을 정해 주어야 합니다. 인식은 되지만 작동하지 않으면, 동작하는 커널에서 (SCSIDEBUG가 정의되어 있으면) 동적으로 디버그 수준을 그것에다 정해주도록 scsi(8) 명령을 사용할 수 있습니다. 이는 권위자조차 혼란시킬 수 있는 *엄청난* 디버깅 출력을 줄 수 있습니다. 더욱 정확한 정보는 man 4 scsi를 보십시오. 또 man 8 scsi을 찾아 보도록 하십시오.
12.5.2.5. 추가 사항
혹시나 당신이 몇가지 심각한 SCSI 해킹을 하려면, 공식적인 표준을 손을 쥐어야 할 겁입니다.
승인된 미국 국가 표준은 11 West 42nd Street, 13th Floor, New York, NY 10036, Sales Dept: (212) 642-4900의 ANSI로부터 구입할 수 있습니다. Global Engineering Documents, 15 Inverness Way East, Englewood, CO 80112-5704, Phone: (800) 854-7179, Outside USA and Canada: (303) 792-2181, FAX: (303) 792-2192로부터 많은 ANSI 표준도 살 수 있고 대부분의 위원회 드래프트 문서(committee draft documents)를 살 수도 있습니다.
SCSI BBS (719-574-0424)와 ncrinfo.ncr.com anonymous ftp 사이트에서 많은 X3T10 드래프트 문서를 전자적으로 사용이 가능합니다.
최신의 X3T10 위원회 문서는:
AT Attachment (ATA or IDE) [X3.221-1994] (Approved)
ATA Extensions (ATA-2) [X3T10/948D Rev 2i]
Enhanced Small Device Interface (ESDI) [X3.170-1990/X3.170a-1991] (Approved)
Small Computer System Interface - 2 (SCSI-2) [X3.131-1994] (Approved)
SCSI-2 Common Access Method Transport and SCSI Interface Module (CAM) [X3T10/792D Rev 11]
추가적인 정보를 제공하는 다른 문건:
"SCSI: Understanding the Small Computer System Interface", written by NCR Corporation. Available from: Prentice Hall, Englewood Cliffs, NJ, 07632 Phone: (201) 767-5937 ISBN 0-13-796855-8
"Basics of SCSI", a SCSI tutorial written by Ancot Corporation Contact Ancot for availability information at: Phone: (415) 322-5322 Fax: (415) 322-0455
"SCSI Interconnection Guide Book", an AMP publication (dated 4/93, Catalog 65237) that lists the various SCSI connectors and suggests cabling schemes. Available from AMP at (800) 522-6752 or (717) 564-0100
"Fast Track to SCSI", A Product Guide written by Fujitsu. Available from: Prentice Hall, Englewood Cliffs, NJ, 07632 Phone: (201) 767-5937 ISBN 0-13-307000-X
"The SCSI Bench Reference", "The SCSI Encyclopedia", and the "SCSI Tutor", ENDL Publications, 14426 Black Walnut Court, Saratoga CA, 95070 Phone: (408) 867-6642
"Zadian SCSI Navigator" (quick ref. book) and "Discover the Power of SCSI" (First book along with a one-hour video and tutorial book), Zadian Software, Suite 214, 1210 S. Bascom Ave., San Jose, CA 92128, (408) 293-0800
Usenet 뉴스그룹에는 comp.preiphs.scsi와 comp.preiphs이 추가 정보를 찾아볼 수 있는 두드러진 장소입니다. 또 거기에서 SCSI-Faq를 찾아볼 수 있는데, 이는 정기적으로 포스팅 됩니다.