tail head cat sleep
QR code linking to this page

Man page  — MTIO

명칭

mtio FreeBSD 자기테이프 인터페이스

내용

해설

/dev/[nr]sa* (이)라는 이름의 스페셜 파일은, SCSI 테이프 드라이브를 나타내고 있습니다. 이 드라이브는, 시스템에 접속할 수가 있습니다. /dev/[nr]sa*.ctl (은)는, 컨트롤 디바이스로, SCSI 테이프 드라이버에 ioctl 시스템 콜을 발행하는데 사용할 수 있습니다. 이것에 의해, 테이프를 언마운트 한 후도 계속해 유효하게 할 필요가 있다 파라미터를 설정할 수 있습니다.

되감아 용디바이스는, 마지막 읽어들여, 써 넣어, 그리고 시크 요구가 종료하든가, 혹은 테이프의 마지막에 도달했을 때에, 자동적으로 테이프를 되감습니다. 통상, 권반환을 실시하지 않는 디바이스명에는, 캐릭터 ‘n’ 하지만 붙일 수 있습니다.

테이프에는, 고정장 레코드도 가변장 레코드도 써 넣을 수가 있습니다. 새로운 정보를 얻고 싶은 경우는, sa(4) (을)를 참조해 주세요. 테이프의 마지막에는, end-of-file 마커가 2 개 붙일 수 있어 테이프 파일의 말미에는, end-of-file 마커가 1 개 붙일 수 있습니다. 테이프가 되감아지지 않은 경우에는, 테이프의 위치는 2 개의 테이프 마크의 사이에 헤드가 오는 곳이 되어, 다음번의 글로 2 번째의 end-of-file 마커 하지만 덧쓰기되게 됩니다.

자기테이프 디바이스는 모두 mt(1) 명령로 제어됩니다.

raw 자기테이프 디바이스에서는, ioctl(2) 에서의 조작이 얼마인가 가능합니다. 이하의 선언은 < sys/mtio.h> (으)로부터의 것입니다.

/*
 * 자기테이프 IO 제어 명령용 구조체 및 선언
 */

/* MTIOCTOP - 자기테이프 조작 명령용 구조체 */ struct mtop {         shortmt_op;             /* 이하로 선언하는 조작 */         daddr_tmt_count;        /* 몇회 조작하는 것인가 */ };

/* 조작 */ #define MTWEOF          0       /* end-of-file 레코드를 쓴다 */ #define MTFSF           1       /* 빈파일까지 전진 */ #define MTBSF           2       /* 빈파일까지 후퇴 */ #define MTFSR           3       /* 빈레코드까지 전진 */ #define MTBSR           4       /* 빈레코드까지 후퇴 */ #define MTREW           5       /* 되감아 */ #define MTOFFL          6       /* 되감아 드라이브를 오프 라인으로 한다 */ #define MTNOP           7       /* 아무것도 하지 않는다. 스테이터스를 설정할 뿐 */ #define MTCACHE         8       /* 콘트롤러 캐쉬를 유효 */ #define MTNOCACHE       9       /* 콘트롤러 캐쉬를 무효 */

#if defined(__FreeBSD__) /* 디바이스용의 블록 사이즈를 설정합니다. 디바이스가 가변장의 것이다 */ /* 경우, 0 이외의 파라미터를 주면(자), 받아들일 수 있었던 파라미터치의 */ /* 블록 사이즈를 가진 고정 블록장의 것으로 바꿀 수 있습니다. 블록 */ /* 사이즈를 0 에 되돌리면(자), 디바이스는 다시 가변장 블록의 것으로 돌아옵니다. */

#define MTSETBSIZ       10

/* 디바이스의 밀도를 설정합니다. 밀도의 값은 SCSI II 의 사양으로 정해져 */ /* 내려 0 에서 0x17 까지의 값을 받습니다. 오픈 모드 때 마셔 이 */ /* 값을 설정해 주세요. */

#define MTSETDNSTY      11

#define MTERASE         12      /* EOM 까지 소거 */ #define MTEOD           13      /* EOM 까지 공백으로 한다 */ #define MTCOMP          14      /* 압축 모드의 선택 0= 오프, 1= 정의 */ #define MTRETENS        15      /* 테이프의 느슨해져 수선 */ #define MTWSS           16      /* 세트 마크 기입 */ #define MTFSS           17      /* 세트 마크까지 전진 */ #define MTBSS           18      /* 세트 마크까지 후퇴 */

#define MT_COMP_ENABLE          0xffffffff #define MT_COMP_DISABLED        0xfffffffe #define MT_COMP_UNSUPP          0xfffffffd

/* * mt_dsreg 의 값으로, 지금 디바이스가 무엇을 하고 있는지를 나타낸다. */ #defineMTIO_DSREG_NIL   0       /* 미지 */ #defineMTIO_DSREG_REST  1       /* 아무것도 하지 않는다 */ #defineMTIO_DSREG_RBSY  2       /* 테이프와 통신중 (그러나, 조작하고 있지 않습니다) */ #defineMTIO_DSREG_WR    20      /* 기입중 */ #defineMTIO_DSREG_FMK   21      /* 파일 마크의 기입중 */ #defineMTIO_DSREG_ZER   22      /* 소거중 */ #defineMTIO_DSREG_RD    30      /* 읽기중 */ #defineMTIO_DSREG_FWD   40      /* 보내 안 */ #defineMTIO_DSREG_REV   41      /* 반환중 */ #defineMTIO_DSREG_POS   42      /* 하드웨어에 의한 위치 결정중 (방향 불명) */ #defineMTIO_DSREG_REW   43      /* 되감아 안 */ #defineMTIO_DSREG_TEN   44      /* 느슨해져 수선중 */ #defineMTIO_DSREG_UNL   45      /* 없애 안 */ #defineMTIO_DSREG_LD    46      /* 없애 안 */

#endif

/* MTIOCGET 용의 구조체 - 자기테이프 상태 취득 명령 */

struct mtget {         shortmt_type;           /* 자기테이프 디바이스의 종류 */ /* 다음의 2 개의 레지스터는 거의 디바이스 의존입니다 */         shortmt_dsreg;          /* ``디바이스 상태''레지스터 */         shortmt_erreg;          /* ``에러''레지스터 */ /* 디바이스 의존 레지스터의 마지막 */         shortmt_resid;          /* 나머지 카운터 */ #if defined (__FreeBSD__)         daddr_t mt_blksiz;      /* 현재 효력이 있는 블록 사이즈 */         daddr_t mt_density;     /* 현재 효력이 있는 기록 밀도 */         daddr_t mt_comp;        /* 현재 효력이 있는 압축법 */         daddr_t mt_blksiz0;     /* 모드 0 용 블록 사이즈 */         daddr_t mt_blksiz1;     /* 모드 1 용 블록 사이즈 */         daddr_t mt_blksiz2;     /* 모드 2 용 블록 사이즈 */         daddr_t mt_blksiz3; /* 모드 3 용 블록 사이즈 */         daddr_t mt_density0;    /* 모드 0 용 기록 밀도 */         daddr_t mt_density1;    /* 모드 1 용 기록 밀도 */         daddr_t mt_density2;    /* 모드 2 용 기록 밀도 */         daddr_t mt_density3; /* 모드 3 용 기록 밀도 */ /* 이하의 것은, 아직 실장되고 있지 않습니다. */         u_charmt_comp0;         /* 모드 0 용 압축법 */         u_charmt_comp1;         /* 모드 1 용 압축법 */         u_charmt_comp2;         /* 모드 2 용 압축법 */         u_charmt_comp3;         /* 모드 3 용 압축법 */ /* 미실장 부분 마지막 */ #endif         daddr_tmt_fileno;       /* 현재 위치의 파일 번호 */         daddr_tmt_blkno;        /* 현재 위치의 블록 번호 */ };

/* MTIOCERRSTAT - 테이프 에러 상태를 취득하는 명령용 구조체 */ /* 현재는, SCSI 테이프용만 서포트되고 있습니다. */ struct scsi_tape_errors {         /*          * 조작용으로 SCSI Check Condition 를 써내는 명령의          * 마지막 실행 결과로부터, 이러한 멤버가 보관 유지됩니다.          * MTIOCERRSTAT 를 발행하면(자) 보관 유지되고 있던 멤버가 클리어 됩니다.          */         u_int8_t io_sense[32];  /* 데이터 I/O 용의 최종 센스 데이터 */         u_int32_t io_resid;     /* 마지막 데이터 I/O 로부터의 나머지 카운터 */         u_int8_t io_cdb[16];    /* 최종 센스 데이터를 만든 명령 */         u_int8_t ctl_sense[32]; /* 제어 I/O 용의 최종 센스 데이터 */         u_int32_t ctl_resid;    /* 마지막 제어 I/O 로부터의 나머지 카운터 */         u_int8_t ctl_cdb[16];   /* 최종 제어 센스 데이터를 만든 명령 */         /*          * 이것들은, 읽고 쓰기시의 누적 에러 카운터입니다.          * (어떻게 누적 에러 카운터를 리셋트 할까는          * 아직 정해져 있지 않습니다. )          * ( 아직 실장되고 있지 않습니다만, 장소만은 확보되어 있습니다. )          */         struct {                 u_int32_t retries;      /* 실행한 리트라이의 총수 */                 u_int32_t corrected;    /* 실행한 잘못 정정의 총수 */                 u_int32_t processed;    /* 잘못 정정의 성공 총수 */                 u_int32_t failures;     /* 잘못 정정 / 리트라이 실패 총수 */                 u_int64_t nbytes;       /* 처리한 총바이트수 */         } wterr, rderr; };

union mterrstat {         struct scsi_tape_errors scsi_errstat;         char _reserved_padding[256]; }; /* * mt_type 바이트용 정수. 이러한 정수는, 리스트 되고 있다 * 타입과 호환성이 있는 콘트롤러로 동일한 것입니다. */ #defineMT_ISTS          0x01    /* TS-11 */ #defineMT_ISHT          0x02    /* TM03 매스 버스: TE16, TU45, TU77 */ #defineMT_ISTM          0x03    /* TM11/TE10 유니버스 */ #defineMT_ISMT          0x04    /* TM78/TU78 유니버스 */ #defineMT_ISUT          0x05    /* 유니버스상의 SI TU-45 에뮬레이션 */ #defineMT_ISCPC         0x06    /* SUN */ #defineMT_ISAR          0x07    /* SUN */ #defineMT_ISTMSCP       0x08    /* DEC TMSCP 프로토콜 (TU81, TK50) */ #define MT_ISCY         0x09    /* CCI Cipher */ #define MT_ISCT         0x0a    /* HP 1/4 테이프 */ #define MT_ISFHP        0x0b    /* HP 7980 1/2 테이프 */ #define MT_ISEXABYTE    0x0c    /* Exabyte */ #define MT_ISEXA8200    0x0c    /* Exabyte EXB-8200 */ #define MT_ISEXA8500    0x0d    /* Exabyte EXB-8500 */ #define MT_ISVIPER1     0x0e    /* Archive Viper-150 */ #define MT_ISPYTHON     0x0f    /* Archive Python (DAT) */ #define MT_ISHPDAT      0x10    /* HP 35450A DAT 드라이브 */ #define MT_ISMFOUR      0x11    /* M4 Data 1/2 9 트럭 드라이브 */ #define MT_ISTK50       0x12    /* DEC SCSI TK50 */ #define MT_ISMT02       0x13 /* Emulex MT02 SCSI 테이프 콘트롤러 */

/* 자기테이프 I/O 제어 명령 */ #define MTIOCTOP_IOW('m', 1, struct mtop)       /* 자기테이프를 조작한다 */ #define MTIOCGET_IOR('m', 2, struct mtget)      /* 테이프 상태 취득 */ /* 다음의 2 개의 명령은 어디에서라도 사용되어 있지 않은 것 같습니다. */ #define MTIOCIEOT_IO('m', 3)                    /* EOT 에러를 무시 */ #define MTIOCEEOT_IO('m', 4)                    /* EOT 에러 유효 */ /* * 32 바이트 type 2 구조를 풀 서포트하는 SCSI-3 SCC (스트림 * 디바이스)가 좀 더 출현할 경우에는, 이 사양이 대상으로 하는 전엔티티 * (64 비트의 블록, 논리 파일 레코드 번호등 )(을)를 이러한 ioctl 가 * 취급할 수 있도록(듯이), 재고할 필요가 있겠지요. */ #define MTIOCRDSPOS     _IOR('m', 5, u_int32_t) /* 논리 블록 주소를 취득 */ #define MTIOCRDHPOS _IOR('m', 6, u_int32_t) /* 하드웨어 블록 주소를 취득 */ #define MTIOCSLOCATE    _IOW('m', 5, u_int32_t) /* 논리 블록 주소를 찾는다 */ #define MTIOCHLOCATE    _IOW('m', 6, u_int32_t) /* 하드웨어 블록 주소를 찾는다 */ #define MTIOCERRSTAT    _IOR('m', 7, union mterrstat) /* 테이프의 에러를 취득 */

#ifndef KERNEL #defineDEFTAPE"/dev/nrsa0" #endif

#ifdefKERNEL /* * 마이나데바이스 번호 */

#define T_UNIT          003             /* 유니트의 선택 */ #define T_NOREWIND      004             /* 권반환을 실시하지 않는다 */ #define T_DENSEL        030             /* 기록 밀도의 선택 */ #define T_800BPI        000             /* 800 bpi 를 선택 */ #define T_1600BPI       010             /* 1600 bpi 를 선택 */ #define T_6250BPI       020             /* 6250 bpi 를 선택 */ #define T_BADBPI        030             /* 미정의치를 선택 */ #endif #endif /* _SYS_MTIO_H_ */

관련 파일

/dev/[nr]sa*
 

관련 항목

mt(1), tar(1), st(4)

역사

mtio 의 메뉴얼은 BSD 4.2 그리고 등장했습니다. i386 버젼은 최초로 FreeBSD 2.2 그리고 등장했습니다.

버그

스테이터스는, 디바이스에 의등 없는 포맷으로 돌려주어지도록(듯이) 해야 합니다.

스페셜 파일의 명명에 대해서는, 좀 더 일관한 만큼 셋집 들이마셔 방법으로 다시 해야 합니다.


FreeBSD 2.2 MTIO (4) February 11, 1996

tail head cat sleep
QR code linking to this page


Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다. Privacy policy.