CAMCONTROL(8)

명칭
camcontrol - CAM 컨트롤 프로그램

서식
camcontrol <command> [device id] [generic args] [command args] camcontrol devlist [-v] camcontrol periphlist [device id] [-n dev_name] [-u unit_number] camcontrol tur [device id] [generic args] camcontrol inquiry [device id] [generic args] [-D] [-S] [-R] camcontrol start [device id] [generic args] camcontrol stop [device id] [generic args] camcontrol load [device id] [generic args] camcontrol eject [device id] [generic args] camcontrol rescan <all | bus[:target:lun]> camcontrol reset <all | bus[:target:lun]> camcontrol defects [device id] [generic args] <-f format> [-P] [-G] camcontrol modepage [device id] [generic args] <-m page | -l> [-P pgctl] [-b | -e] [-d] camcontrol cmd [device id] [generic args] <-c cmd [args]> [-i len fmt] [-o len fmt [args]] camcontrol debug [-I] [-T] [-S] [-c] <all|off|bus[:target[:lun]]> camcontrol tags [device id] [generic args] [-N tags] [-q] [-v] camcontrol negotiate [device id] [generic args] [-c] [-D enable|disable] [-O offset] [-q] [-R syncrate] [-T enable|disable] [-U] [-W bus_width] [-v] camcontrol format [device id] [generic args] [-q] [-w] [-y] camcontrol help

해설
camcontrol 유틸리티는, 유저가 FreeBSD CAM 하부조직에 액세스 해 제어할 수 있도록(듯이) 하는 방법을 제공한다 위해(때문에) 설계되고 있습니다.

camcontrol 유틸리티를 부적절하게 사용하면(자), 데이터의 손실이나, 시스템 크래쉬로 연결될 가능성이 있습니다. 경험 풍부한 유저여도, 이 명령을 사용하려면 주위를 기울이는 것을 추천합니다. 아마추어씨는 이 유틸리티에 가까워져서는 안됩니다.

camcontrol 유틸리티는 몇개의 주기능을 가지고 있습니다. 그 많게는, 생략 가능한 디바이스 식별자를 서포트합니다. 디바이스 식별자는, 다음의 3 종류의 서식의 어느쪽이든을 취할 수 있습니다:

deviceUNIT
    디바이스명과 디바이스 번호의 편성을,"da5" 나 "cd3" 와 같이 지정합니다. 캐릭터 디바이스 노드명 (예를 들면 /dev/da0)은, 여기에서는 용서되고 없다 일로 주의해 주세요.

bus:target
    버스 번호와 타겟 id 를 지정합니다. 버스 번호는 “camcontrol devlist” 의 출력에 의해 결정 가능합니다. 논리 장치 번호 (lun)는 디폴트의 0 이 됩니다.

bus:target:lun
    디바이스의 버스 (bus)와 타겟 (target)과 논리 장치 번호 (lun)를, (예를 들면 1:2:0 과 같이) 지정합니다.

디바이스 식별자는, 지정되었을 경우에는, 기능명의 직후에 한편, 모든 공통 인수 또는 기능 고유 인수의 전에 놓여지는 것이 필요 입니다. 후술 한다 -n (와)과 -u 의 인수는, 그 전으로 지정되는 디바이스명이나 유니트 번호를 오바라이드 하는 것에 주의해 주세요. 그러나, -n (와)과 -u 의 인수는, bus:target 또는 bus:target:lun 의 지정은 오바라이드 하지 않습니다.

camcontrol 의 주기능의 상당수는 아래에 나타내는 공통 인수 (generic argument)를 서포트합니다:

-C count
    SCSI 명령의 리트라이 카운트. 이 기능이 동작하기 위해서는, 에러 리커버리 (-E) (을)를 온으로 해 둘 필요가 있습니다.

-E  지정한 명령을 위한 범용의 SCSI 에러 리커버리를 수행 하도록, 커널에 지시를 내립니다. 리트라이 카운트 기능 (-C) (을)를 유효하게 하기 위해서는 이것이 필요합니다. 명령의 리트라이 외에, 코드중에 있는 범용의 에러 리커버리에 의해, 돌지 않은 HDD 를 회전시키는 것 같은 시도가 통상 됩니다. 명령로부터 돌려주어진 센스 코드에 따라서는, 다른 조작이 행해질 수도 있습니다.

-n dev_name
    조작을 행하는 디바이스의 타입을 지정합니다. 이것은 예를 들면 "da", "ca" 입니다.

-t timeout
    SCSI 명령의 타임 아웃을 초단위로 지정합니다. 지정한 커멘드의 모두에게 두어, 이것으로 지정하는 값은 디폴트의 타임 아웃보다 우선됩니다.

-u unit_number
    디바이스 유니트 번호를 지정합니다. 디폴트는 0 입니다.

-v  요설이 됩니다. SCSI 명령에 실패하면(자) 센스 정보를 표시합니다.

주명령 기능은 다음과 같습니다.

devlist
    CAM 하부조직에 접속된 모든 물리 디바이스 (논리 유니트)의 리스트를 표시합니다. 이 리스트에는 각 디바이스에 접속된 주변 드라이버의 일람도 포함됩니다. 인수 -v (을)를 지정하면(자), SCSI 버스 번호, 어댑터명, 유니트 번호도 아울러 표시됩니다.

periphlist
    지정한 물리 디바이스 (논리 유니트)에 접속된 모든 주변 드라이버의 리스트를 표시합니다.

tur 지정한 디바이스에 SCSI test unit ready (0x00) 명령을 송신합니다. camcontrol 유틸리티는, 그 디바이스가 레이디 상태인지 어떤지를 보고합니다.

inquiry
    디바이스에 SCSI inquiry (0x12) 명령을 송신합니다. 디폴트에서는, camcontrol 표준의 inquiry 데이터, 디바이스의 시리얼 번호, 전송 레이트 정보를 표시합니다. 특정의 타입의 inquiry 데이터만을 표시하도록(듯이) 지정할 수도 있습니다.

    -D  표준 inquiry 데이터를 얻습니다.

    -S  시리얼 번호를 표시합니다. 이 플래그만이 지정되었을 경우, camcontrol (은)는, 드라이브가 돌려주는 값의 전에 "Serial Number" 를 표시하지 않습니다. 이것은 스크립트를 쓸 때에 도움이 됩니다.

    -R  전송 레이트의 정보를 표시합니다.

start
    지정한 디바이스에, start 비트를 세트 한 SCSI Start/Stop Unit (0x1B) 명령을 송신합니다.

stop
    지정한 디바이스에, start 비트를 클리어 한 SCSI Start/Stop Unit (0x1B) 명령을 송신합니다.

load
    지정한 디바이스에, start 비트를 세트 해 load/eject 비트를 세트 했다 SCSI Start/Stop Unit (0x1B) 명령을 송신합니다.

eject
    지정한 디바이스에, start 비트를 클리어 해 load/eject 비트를 세트 했다 SCSI Start/Stop Unit (0x1B) 명령을 송신합니다.

rescan
    커널에, 모든 버스 ( all 인수를 지정했을 경우), 지정한 버스 (XPT_SCAN_BUS), 혹은 bus:target:lun (XPT_SCAN_LUN)(을)를 스캔시켜, 신규의 디바이스나 떼어진 디바이스를 찾게 합니다. 유저가 지정할 수 있는 것은, 스캔 하는 버스 혹은 논리 장치 번호 뿐입니다. 어느 타겟의 모든 논리 장치 번호를 스캔 하는 것은 서포트되고 있지 않습니다.

reset
    커널에, 모든 버스 all 인수를 지정했을 경우), 지정한 버스 (XPT_RESET_BUS) 혹은 bus:target:lun (XPT_RESET_DEV)(을)를 리셋트 시킵니다. 전자는, 버스에 SCSI 버스 리셋트를 발행하는 것으로써 실시합니다. 후자는, 전형적으로는 해당 디바이스에 코네크트 한 후에, BUS DEVICE RESET 메세지를 발행하는 것으로써 실시합니다. 본명령은 시스템에 파괴적인 영향을 주는 일이 있는 것에 주의해 주세요.

defects
    지정한 디바이스에, SCSI READ DEFECT DATA (10) 명령 (0x37)를 송신해, 디펙트 총수, 초기 디펙트 리스트 (PLIST), 증분 디펙트 리스트 (GLIST)(을)를 조합해 표시합니다.

    -f format
        서식 옵션은 이하의 3 개입니다. block, 리스트를 논리 블록 형식에서 표시합니다. bfi, 리스트를 인덱스로부터의 바이트수의 형식에서 표시합니다. phys, 리스트를 물리 섹터 형식에서 표시합니다. 서식 인수는 필수입니다. 대부분의 드라이브 (은)는, 물리 섹터 형식을 서포트하고 있습니다. 일부의 드라이브는 논리 블록 형식을 서포트하고 있습니다. 지정한 서식을 서포트하고 있지 않는 경우, 많은 드라이브는, 지정한 데이터 서식을 서포트하고 있지 않는 것을 나타내는 센스 정보와 함께, 다른 서식에서 데이터를 돌려줍니다. camcontrol 유틸리티는, 그것을 검지해 드라이브가 돌려주는 서식이라면 어떠한 것에서도 표시하려고 합니다. 드라이브가 지정한 서식을 서포트하고 있지 않는 것을 보고할 때에, 비표준의 센스 코드를 이용했을 경우, camcontrol (은)는, 아마 그 에러를 리퀘스트 완료에 실패했기 때문에의 것이라고 보겠지요.

    -G  증분 디펙트 리스트를 표시합니다. 이것은, 공장 출하시 이후에 재MAP 된 불량 블록의 리스트입니다.

    -P  초기 디펙트 리스트를 표시합니다.

    -P 도 -G 도 어느쪽이나 지정하고 있지 않는 경우, camcontrol (은)는, 드라이브로부터 돌려주어진 READ DEFECT DATA 헤더로부터 얻을 수 있는 디펙트수를 표시합니다.

modepage
    SCSI 모드 페이지를 표시합니다. 혹은, 옵션지정에 의해 유저가 모드 페이지를 편집할 수 있도록(듯이) 합니다. modepage 의 서식은 /usr/share/misc/scsi_modes 에 있습니다. 환경 변수 SCSI_MODES 에 다른 파일이 지정되어 있는 경우는 그 쪽이 우선됩니다. modepage 명령은 이하와 같은 몇개의 인수를 취합니다.

    -d  모드 센스를 위한 블록 기술자를 금지합니다.

    -b  모드 페이지 데이터를 바이너리 포맷으로 표시합니다.

    -e  이 플래그를 지정하는 것으로, 유저는 모드 페이지중의 값을 편집하는 것이 할 수 있습니다. 모드 페이지의 값을 EDITOR 환경 변수가 가리키는 에디터로 편집하는 일도 가능하고, camcontrol 하지만 모드 페이지치를 표시에 사용하는 것과 같은 서식에서 모드 페이지치를 표준 입력으로부터 제공하는 일도 가능합니다. 표준 입력이 단말이라고 camcontrol 하지만 검출하면(자) 에디터가 기동됩니다.

    -l  사용 가능한 전모드 페이지를 열거합니다. Lists all available mode pages.

    -m mode_page
        유저가 표시/편집하고 싶은 모드 페이지 번호를 지정합니다. -l 하지만 지정되어 있지 않으면, 이 인수는 필수입니다.

    -P pgctl
        이 플래그를 지정하는 것으로, 유저는 페이지 제어 필드를 지정하는 것이 할 수 있습니다. 지정 가능한 값은 다음과 같습니다.
        0   현재의 값
        1   변경 가능한 값
        2   디폴트의 값
        3   보존된 값

cmd 임의의 디바이스에 임의의 SCSI CDB 를 송신하기 위해서 이용할 수가 있습니다. cmd 기능은, CDB 를 지정하기 위한 -c 인수가 필요합니다. 다른 인수는 옵션으로, 명령의 형태에 의존합니다. 커멘드와 데이터를 지정하는 문법은, cam_cdbparse(3). 에 기술되고 있습니다. 주: 지정한 CDB 에 의해, 대상의 SCSI 디바이스와의 데이터 송수신이 발생하는 경우, -i 또는 -o (을)를 지정할 필요가 있습니다.

    -c cmd [args]
        이것은 SCSI CDB 를 지정합니다. CDB 는 6, 10, 12, 16 바이트의 언젠가 하지만 가능합니다.

    -i len fmt
        이것은, 읽어들이는 데이터의 양이라고 어떻게 표시할까하고를 지정합니다. 서식이 ‘-’ 인 경우, len 바이트의 데이터가 디바이스로부터 읽혀 표준 출력에 써내집니다.

    -o len fmt [args]
        이것은, 디바이스에 써내는 데이터의 양과 써내지는 데이터를 지정합니다. 서식이 ‘-’ 인 경우, len 바이트의 데이터가 표준 입력으로부터 읽히고 디바이스에 써내집니다.

debug
    커널의 CAM 디버그용 printf 를 온으로 합니다. 커넬의 설정 파일중에 CAMDEBUG 옵션이 지정되어 있을 필요가 있습니다. 주의: 현재로서는, 디버그 용 printf 를 사용할 수 있도록(듯이) 하면(자), 지극히 다수의 커널 printf 가 생긴다 됩니다. 한 번 디버그용 printf 를 스타트 시켜 버리면(자), 정지시키는 것은 어렵다 그렇지. 그렇다고 하는 것은, 커널은 메세지를 표시하는데 바빠지므로, 다른 리퀘스트를 곧바로 서비스할 수가 없게 되기 때문입니다. debug 기능은 몇개의 인수를 취합니다.

    -I  CAM_DEBUG_INFO printf 를 유효하게 합니다.

    -T  CAM_DEBUG_TRACE printf 를 유효하게 합니다.

    -S  CAM_DEBUG_SUBTRACE printf 를 유효하게 합니다.

    -c  CAM_DEBUG_CDB printf 를 유효하게 합니다. 이것에 의해, 커널이, 지정했다 디바이스에 송신한 SCSI CDB 를 표시하게 됩니다.

    all 모든 디바이스에 대해 디버그 출력을 유효하게 합니다.

    off 모든 디바이스에 대해 디버그 출력을 무효로 합니다.

    bus[:target[:lun]]
        지정한 버스, 타겟, 논리 장치 번호(lun)에 대해 디버그 출력을 유효하게 합니다. 논리 장치 번호, 혹은 타겟과 논리 장치 번호가 지정되지 않는 경우는, 와일드 카드 지정된 것으로서 취급합니다. (즉, 버스만을 지정하면(자), 그 버스의 모든 디바이스에 대해 디버그용 printf 가 유효하게 됩니다. )

tags
    "tagged openings" 의 수를, 표시 또는 설정합니다. 이 값은, 특정의 디바이스에 대해서 동시에 큐잉 가능한 트랜잭션(transaction)수입니다. 디폴트에서는, 명령 고유의 인수가 없으면 (일반적인 인수만을 지정하면(자)), tags 명령은, 대상의 디바이스에 큐잉 가능한 트랜잭션(transaction)수의 "soft" 최대치를 표시합니다. 한층 더 상세한 정보를 얻으려면 , 다음에 설명한다 -v 인수를 지정해 주세요.

    -N tags
        지정한 디바이스의 태그수를 설정합니다. 이 값은, 커널중의 버릇의 겉(표) (quirk table)에 있는 최소치와 최대치의 사이에 있을 필요가 있습니다. 태그 첨부 큐잉을 서포트하는 대부분의 디바이스의 디폴트는, 최소치가 2 로 최대치가 255 입니다. 지정한 디바이스의 최대치로 최소치를 조사하려면 , -v 스윗치를 사용합니다. 이 camcontrol 서브 명령에 대한다 -v 스윗치의 의미는 후술 합니다.

    -q  조용하게 되어, 태그수를 보고하지 않습니다. 일반적으로는, 태그수를 설정할 경우에 사용합니다.

    -v  장황 플래그는, tags 인수에 대해서는 특수한 기능이 있습니다. 이 플래그를 지정하면(자) camcontrol (은)는, XPT_GDEV_TYPE CCB 의 태그 첨부 큐잉 관련 필드를 표시합니다:

        dev_openings
            지정된 디바이스에 대해서 큐잉 가능한 트랜잭션(transaction)의 총수입니다.

        dev_active
            지정된 디바이스에 대해서 현재 큐잉 되고 있는 트랜잭션(transaction)수입니다.

        devq_openings
            트랜잭션(transaction)용의 커널 큐 공간입니다. 통상 이 수는 dev_openings 를 반영합니다. 에러 리커버리시는 예외이며, 대상 디바이스의 큐는 동결될까 (디바이스는 명령 수신이 용서되지 않습니다), dev_openings 의 수를 줄일 수 있는지, 트랜잭션(transaction)의 재실행을 합니다.

        devq_queued
            커널 큐내에서 디바이스가 비는 것을 기다리고 있는 트랜잭션(transaction)수입니다. 에러 리커버리중이 아니면, 통상 이 수는 0 입니다.

        held
            held 수는, 주변장치 드라이버가 보관 유지하는 CCB 수입니다. 이러한 CCB 는, 꼭 완료한 것인지, 디바이스에 의해 서비스를 받기 위해서(때문에) 전송층에게 건네지려 하고 있는 것입니다. 보관 유지되고 있는 CCB 는, 대상의 디바이스에 빈 곳을 예약합니다.

        mintags
            동시에 디바이스에 큐잉 가능한 트랜잭션(transaction)수의, 현재의 "hard" 최소치입니다. 기출의 dev_openings 값은 이 수보다 작지는 될 수 없습니다. mintags 의 기본값은 2 입니다만, 디바이스에 따라서는보다 크고 또는보다 작게 설정될 수 있습니다.

        maxtags
            동시에 디바이스에 큐잉 가능한 트랜잭션(transaction)수의, 현재의 "hard" 최대치입니다. 기출의 dev_openings (은)는 이 값보다 크지는 될 수 없습니다. maxtags 의 기본값은 255 입니다만, 디바이스에 따라서는보다 크고 또는보다 작게 설정될 수 있습니다.

negotiate
    여러가지 통신 파라미터를, 표시 또는 네고시에이트 합니다. 콘트롤러에 따라서는, 특정의 값의 설정이나 변경을 서포트하지 않습니다. 예를 들면 Adaptec 174x 콘트롤러는, 디바이스의 동기 레이트나 오프셋(offset)의 변경을 서포트하지 않습니다. 어느 파라미터의 설정을 서포트하지 않으면 콘트롤러가 가리키는 경우, camcontrol 유틸리티는 그 파라미터의 설정을 시도하지 않습니다. 콘트롤러가 서포트하는 것을 조사하려면 , -v 플래그를 사용합니다. negotiate 명령에서의 -v 플래그의 의미는 후술 합니다. 또, 콘트롤러 드라이버에 따라서는, 하위의 콘트롤러가 있는 네고시에이션 파라미터의 변경을 서포트하고 있는 것에도 불구하고, 그 네고시에이션 파라미터의 설정을 서포트하지 않습니다. Advansys 와이드 콘트롤러와 같이, 콘트롤러의 동기 네고시에이션의 유효와 무효를 서포트하고 있기에도 관계없이, 동기 네고시에이션 레이트의 설정을 서포트하지 않는 콘트롤러가 있습니다.

    -a  네고시에이션 설정이 곧바로 효과를 가지도록(듯이) 하기 위한(해), 대상 디바이스에 Test Unit Ready 명령을 보냅니다.

    -c  현재의 네고시에이션 설정을, 표시 또는 설정합니다. 이것이 디폴트입니다.

    -D enable|disable
        절단 (disconnection)을, 유효 또는 무효로 합니다.

    -O offset
        명령 지연 오프셋(offset)를 설정합니다.

    -q  조용하게 되어, 아무것도 표시하지 않습니다. 일반적으로는, 파라미터를 설정하고 싶지만 상태 정보는 불필요하다라고 나무에 유용합니다.

    -R syncrate
        디바이스의 동기 레이트를 변경합니다. 동기 레이트는, MHz 로 지정되는 부동 소수점치입니다. 예를 들면 ‘20’ (으)로서는, ‘20.000’ 하지만 올바른 값입니다.

    -T enable|disable
        디바이스의 태그 첨부 큐잉을, 유효 또는 무효로 합니다.

    -U  유저의 네고시에이션 설정을, 표시 또는 설정합니다. 디폴트에서는, 현재의 네고시에이션 설정을 표시 또는 설정합니다.

    -v  장황 플래그는, ‘negotiate’ 서브 명령에 대해서는 특수한 의미가 있습니다. 이 플래그를 지정하면(자) camcontrol (은)는, 콘트롤러 디바이스에 보낸 Path Inquiry (XPT_PATH_INQ) CCB 의 내용을 표시합니다.

    -W bus_width
        디바이스와 네고시에이트 하는 버스폭을 지정합니다. 버스폭은 비트수로 지정합니다. 지정 가능한 값은, 8, 16, 32 의 몇개의 비트수입니다. 설정이 효과를 가지기 위해서(때문에)는, 그 버스폭을 콘트롤러가 서포트할 필요가 있습니다.

    일반적으로는, 어느 디바이스의 동기 레이트와 오프셋(offset) 설정이 효과를 나타내는 것은, 그 디바이스에 대해서 명령이 보내지고 나서입니다. 전술의 -a 스윗치는, 네고시에이션 파라미터가 효과를 나타내도록(듯이) 하기 위한(해), 자동적으로 Test Unit Ready 를 디바이스에 보냅니다.

format
    SCSI FORMAT UNIT 명령을 지정한 디바이스에 보냅니다.

    경고! 경고! 경고!

    디스크를 로우레벨 포맷 하면(자), 디스크상의 「모든 것」의 데이터를 파괴합니다. 이 명령을 발행할 경우에는, 매우 주의해 주세요. 사실은 로우레벨 포맷이 불필요한 디스크에 대해, 많은 유저가 로우레벨 포맷을 실시하고 있습니다. 로우레벨 포맷이 필요한 상황은, 비교적 적습니다. 로우레벨 포맷이 필요한 이유의 하나는, 디스크의 물리 섹터의 크기를 바꾼 다음에 디스크를 초기화하기 (위해)때문입니다. 로우레벨 포맷이 필요한 다른 이유는, 디스크에의 읽어들여 또는 기입의 요구에 대해서 "medium format corrupted" (미디어 포맷이 망가져 있다) 에러가 되는 경우에, 그 디스크를 restore시키기 (위해)때문입니다.

    디스크에 따라서는, 다른 디스크보다 포맷에 시간이 걸립니다. 포맷이 완료하기 위해서 충분한 타임 아웃치를, 유저가 지정할 필요가 있습니다. 디폴트의 포맷 타임 아웃은 3 시간입니다. 하드 디스크에 따라서는, 매우 짧은 기간 (5 분 이하의 단위) 그리고 포맷 조작이 완료합니다. 이러한 경우의 대부분은, FORMAT UNIT 명령을 드라이브가 실제로는 서포트를 하고 있지 않기 때문에, 즉 명령을 받아들여 몇분 기다리고 나서 돌아오는 것만으로 있기 때문에입니다.

    ‘format’ 서브 명령은 몇개의 인수를 취해, 디폴트의 동작을 바꿉니다. -q 및 -y 의 인수는, 스크립트에 대해 유용합니다.

    -q  조용하게 되어, 상태 메세지를 표시하지 않습니다. 그렇지만, 본옵션은, 질문은 무효화하지 않습니다. 질문을 무효화하려면 , 후술의 -y 인수를 사용해 주세요.

    -w  비즉시의 포맷 명령을 발행합니다. 디폴트에서는, camcontrol (은)는 FORMAT UNIT 명령을 즉시 비트 (immediate bit)를 세트 해 발행합니다. 이것은, 포맷이 실제로 완료하기 전에, 즉시에 포맷 명령을 돌려주도록, 디바이스에 지시합니다. 그리고 camcontrol 하지만 SCSI 센스 정보를 매초 디바이스로부터 수집해, 포맷 처리의 진척을 판단합니다. -w 인수가 지정되면(자), camcontrol (은)는 비즉시의 포맷 명령을 발행합니다. 이 경우, 디스크의 몇 퍼센트가 포맷 되었는지를 유저에게 알리기 위한 표시는 행해지지 않습니다.

    -y  질문을 하지 않습니다. 디폴트에서는, camcontrol (은)는 유저에 대해, 대상의 디스크를 정말로 포맷 하고 싶은 것인지, 그리고 포맷 명령의 디폴트 타임 아웃으로 좋은가를 질문합니다. 타임 아웃을 명령행으로 지정했을 경우, 타임 아웃은 질문받지 않습니다.

help
    장황한, 사용 방법에 관한 정보를 표시합니다.

환경 변수
변수 SCSI_MODES 에 의해, 다른 모드 페이지의 서식 파일을 지정할 수가 있습니다.

변수 EDITOR 에 의해, camcontrol (은)는, 모드 페이지의 편집을 행할 때에 어느 텍스트 문자 편집기를 기동할까를 결정합니다.

관련 파일
/usr/share/misc/scsi_modes
    SCSI 모드 서식 데이타베이스.
/dev/xpt0
    트랜스폴트층 디바이스.
/dev/pass*
    CAM 아프리케이션파스스르데바이스.

사용예
    camcontrol eject -n cd -u 1 -v

cd1 로부터 CD 를 이젝트 해, 명령 실행에 실패했을 경우는 SCSI 센스 정보를 출력합니다.

    camcontrol tur da0

SCSI test unit ready 명령을 da0 에 송신합니다. camcontrol 유틸리티는 그 디스크가 레이디 상태인지 어떤지를 보고합니다만, -v 스윗치가 지정되어 있지 않기 때문에, 명령 실행에 실패해도 센스 정보를 표시하지 않습니다.

    camcontrol tur da1 -E -C 4 -t 50 -v

SCSI test unit ready 명령을 da1 에 송신합니다. 커널 에러 리커버리 (을)를 유효하게 합니다. 리트라이 카운트를 4 에, 타임 아웃을 50 초에 설정합니다. 명령 실행에 실패했을 경우( -v 플래그가 있으므로) 센스 정보가 출력됩니다. 에러 리커버리가 설정되어 있으므로, 디스크가 회전하고 있지 않는 경우는 회전 당합니다. camcontrol 유틸리티는 디스크가 레이디 상태인지 어떤지를 보고합니다.

    camcontrol cmd -n cd -u 1 -v -c "3C 00 00 00 00 00 00 00 0e 00" \
    	-i 0xe "s1 i3 i1 i1 i1 i1 i1 i1 i1 i1 i1 i1"

READ BUFFER 명령 (0x3C)를 cd1 에 대해서 발행합니다. cd1 의 버퍼 사이즈와 cd1 의 캐쉬의 최초의 10 바이트를 표시합니다. 명령 실행에 실패했을 경우 SCSI 센스 정보를 표시합니다.

    camcontrol cmd -n cd -u 1 -v -c "3B 00 00 00 00 00 00 00 0e 00" \
    	-o 14 "00 00 00 00 1 2 3 4 5 6 v v v v" 7 8 9 8

WRITE BUFFER 명령 (0x3B)를 cd1 에 대해서 발행합니다. (예약제의) 4 바이트 헤더를 포함하지 않는 데이터 10 바이트를 써냅니다. 명령 실행에 실패했을 경우 센스 정보를 표시합니다. 이 명령에는 세심의 주위를 기울여 주세요. 부적절하게 사용했을 경우, 데이터가 파괴될지도 모릅니다.

    camcontrol modepage da3 -m 1 -e -P 3

da3 의 모드 페이지 1 (Read-Write Error Recover 페이지)을 편집해, 편집 결과를 그 드라이브에 세이브합니다. 모드 페이지 1 에는, 디스크 드라이버의 읽어내, 기입의 자동재배치의 설정등이 포함됩니다.

    camcontrol rescan all

시스템중의 모든 SCSI 버스에 대해, 추가/삭제/변경된 디바이스를 재스캔 합니다.

    camcontrol rescan 0

SCSI 버스 0 을 재스캔 해, 추가, 삭제, 변경된 디바이스를 찾습니다.

    camcontrol rescan 0:1:0

SCSI 버스 0, 타겟 1, 논리 장치 번호 0 을 재스캔 해, 그 디바이스가 추가, 삭제, 변경되었는지 어떠했는지를 조사합니다.

    camcontrol tags da5 -N 24

da5 의 동시 트랜잭션(transaction)수를 24 로 설정합니다.

    camcontrol negotiate -n da -u 4 -T disable

da4 의 태그 첨부 큐잉을 무효로 합니다.

    camcontrol negotiate -n da -u 3 -R 20.000 -O 15 -a

동기 레이트 20MHz 로 오프셋(offset) 15 를, da3 와 네고시에이트 합니다. 그 후 Test Unit Ready 명령을 보내, 설정이 효과를 나타내도록(듯이) 합니다.

관련 항목
cam(3), cam_cdbparse(3), cam(4), pass(4), xpt(4)

역사
camcontrol 유틸리티는, FreeBSD 3.0 그리고 최초로 나타났습니다.

모드 페이지 편집의 코드와 임의의 SCSI 명령의 코드는, Julian Elischer 와 Peter Dufault 가 쓴, 한 때의 scsi(8) 유틸리티와 scsi(3) 프로그램 라이브러리의 것에 근거하고 있습니다. scsi(8) 프로그램이 최초로 출현한 것은 386BSD 0.1. 2.4 그리고, FreeBSD 그리고 최초로 출현한 것은, FreeBSD 2.0.5 입니다.

저자
Kenneth Merry <ken@FreeBSD.org>

버그
명령행 인수를 해석하는 코드는, 어느 서브 커멘드가 복수의 인수를 취할까를 모릅니다. 그러니까, 예를 들어,

    camcontrol cmd -n da -u 1 -c "00 00 00 00 00 v" 0x00 -v

(와)과 같은 일을 시도했을 경우, test unit ready 명령로 얻을 수 있는 센스 정보는 출력되지 않습니다. 그렇다고 하는 것은, -c 의 2 번째의 인수 (0x00) (을)를 본 시점에서, camcontrol 의 최초의 getopt(3) 호출이 끝나 버리기 (위해)때문입니다. 이 동작을 수정하려면 , 어느 정도의 규모의 코드를 추가 기입인가, getopt(3) 인터페이스를 변경할까의 어느 쪽인지가 필요하겠지요. 이 문제를 회피하는 가장 좋은 방법은, 항상 camcontrol 공통 인수를 명령 고유의 인수의 전으로 지정하고 있는 것을 확인하는 것입니다.