rmt 특수 파일
용도
순차 액세스 대량 스토리지 매체 디바이스 드라이버에 대한 액세스를 제공합니다.
설명
자기 테이프는 주로 백업, 파일 아카이브 및 기타 오프라인 스토리지에 사용됩니다. 테이프는 /dev/rmt0, ..., /dev/rmt255 특수 파일을 통해 액세스됩니다. 특수 파일 이름의 r 은 문자 특수 파일 인터페이스를 통한 원시 액세스를 표시합니다. 테이프 장치는 블록 장치의 범주에 적합하지 않습니다. 따라서 문자 인터페이스 특수 파일만 제공됩니다.
각 테이프 장치와 연관된 특수 파일 은 열기 또는 닫기 조작 중에 수행되는 조치를 판별합니다. 이러한 파일은 또한 적용 가능한 디바이스에 대해 테이프에 기록될 밀도 데이터를 지시합니다. 다음 표는 이러한 특수 파일의 이름 및 해당 특성을 표시합니다.
| 특수 파일 이름 | 요건 |
|---|---|
| /dev/rmt* |
|
| /dev/rmt*.1 |
|
| /dev/rmt*.2 |
|
| /dev/rmt*.3 |
|
| /dev/rmt*.4 |
|
| /dev/rmt*.5 |
|
| /dev/rmt*.6 |
|
| /dev/rmt*.7 |
|
- 밀도 설정 #1 및 밀도 설정 #2 의 값은 SMIT를 사용하여 설정할 수 있는 테이프 드라이브 속성에서 가져옵니다. 일반적으로 밀도 설정 #1 는 테이프 드라이브에 대해 가능한 가장 높은 밀도로 설정되는 반면, 밀도 설정 #2 는 더 낮은 밀도로 설정됩니다. 그러나 이 패턴을 따르기 위해 밀도 설정이 필요하지 않습니다.
- 복수 밀도를 지원하지 않는 자기 테이프 장치를 사용하는 경우에는 밀도 값 (인치당 바이트 수) 이 무시됩니다. 복수 밀도를 지원하는 테이프 드라이브의 경우, 밀도 값은 테이프에 기록할 때만 적용됩니다. 읽을 때 드라이브의 기본값은 테이프가 기록되는 밀도입니다.
- 대부분의 테이프 드라이브는 512바이트블록 크기를 사용합니다. 8mm 테이프 드라이브는 최소 1024바이트의 블록 크기를 사용합니다. SMIT를 사용하여 블록 크기를 줄이면 공간이 낭비됩니다.
사용 고려사항
대부분의 테이프 조작은 open, read, write및 close 서브루틴을 사용하여 구현됩니다. 그러나 진단을 위해 openx 서브루틴이 필요합니다.
서브루틴 열기 및 닫기
파일을 작성한 후 닫을 때에는 주의해야 합니다. 애플리케이션이 방금 쓴 데이터를 되돌리면 파일 표시가 기록되지 않습니다. 그러나 블록 갱신을 허용하는 테이프 디바이스의 경우, 애플리케이션이 테이프 위치를 반대 방향으로 지정하거나 테이프 위치를 테이프 시작 (BOT) 으로 리턴하지 않으면 디바이스를 닫을 때 하나 또는 두 개의 파일 표시가 기록됩니다. (파일 표시 수는 특수 파일 유형에 따라 다릅니다.)
다중 테이프 작업의 경우, 각 테이프에 대해 특수 파일을 열고 닫아야 합니다. 특수 파일이 열리고 테이프가 변경된 경우에는 사용자가 계속할 수 없습니다.
openx 서브루틴은 주로 진단 명령 및 유틸리티에서 사용하기 위한 것입니다. 실행하려면 적절한 권한이 필요합니다. 이 서브루틴을 적절한 권한 없이 실행하면 반환 값이 되며 -1, errno 전역 변수가 EPERM 으로 설정됩니다.
읽기 및 쓰기 서브루틴
읽기 또는 쓰기를 위해 열리면 테이프가 원하는 위치에 있는 것으로 가정합니다. 테이프가 no-rewind-on-close (/dev/rmt*.1) 로 열리고 파일이 기록되면 테이프를 닫을 때 단일 파일 표시가 기록됩니다. 테이프가 rewind-on-close (/dev/rmt *) 로 열리고 파일이 기록되면 테이프를 닫을 때 이중 파일 표시가 기록됩니다. 테이프가 닫을 때 되감기 없음으로 열리고 파일에서 읽을 때, 테이프는 방금 읽은 데이터 뒤에 EOF (파일 끝) 표시 다음에 닫을 때 위치합니다.
특히 rmt 파일을 선택하여 여러 개의 파일 테이프를 작성할 수 있습니다.
문자 인터페이스 특수 파일을 통해 테이프에 액세스하더라도, 읽기 또는 쓰기 조작에 필요한 바이트 수는 자기 테이프 장치에 대해 정의된 블록 크기의 배수여야 합니다. 테이프 드라이브가 가변 블록 모드에 있을 때 테이프의 블록 크기보다 작은 읽기 요청은 요청된 바이트 수를 리턴하고 errno 전역 변수를 0값으로 설정합니다. 이 경우 readx 서브루틴의 Extension 매개변수를 TAPE_SHORT_READ로 설정해야 합니다.
읽기 중에 레코드 크기는 지정된 버퍼 크기까지 읽은 바이트 수로 리턴됩니다. EOF 조건이 발생하면 길이가 0인 읽기가 리턴되고 테이프는 EOF뒤에 위치합니다.
읽기 또는 쓰기 조작 중에 EOM (end-of-media) 조건이 발생하면 성공적으로 준비되거나 기록된 바이트 수가 리턴됩니다. 장치가 EOM(끝)에 도달한 후 쓰기 시도가 이루어지면, errno 전역 변수가 ENXIO 값으로 설정된 상태에서 값이 -1 반환됩니다. 디바이스가 EOM에 도달한 후 읽기를 시도하면 길이가 0인 읽기가 리턴됩니다. 연속 읽기는 계속해서 길이가 0인 읽기를 리턴합니다.
테이프 장치를 사용한 데이터 버퍼링: 일부 테이프 장치에는 테이프에 기록할 때 데이터 전송 속도를 최대화하기 위한 데이터 버퍼가 포함되어 있습니다. 테이프로 전송된 쓰기 조작은 데이터가 테이프 장치의 데이터 버퍼로 전송될 때 완료된 것으로 리턴됩니다. 버퍼의 데이터는 비동기식으로 테이프에 기록됩니다. 결과적으로, 호스트가 I/O 완료를 기다릴 필요가 없으므로 데이터 전송 속도가 증가합니다.
테이프 장치 드라이버는 이러한 데이터 버퍼의 사용을 용이하게 하기 위해 두 가지 모드를 제공합니다. 버퍼링되지 않은 모드를 사용하면 테이프에 쓰기를 수행하여 데이터 버퍼를 생략하고 테이프로 직접 이동합니다. 버퍼 모드에서 모든 쓰기 서브루틴은 전송 데이터가 테이프 디바이스 버퍼에 성공적으로 기록된 경우 완료된 것으로 리턴됩니다. 디바이스 드라이버는 특수 파일이 닫히거나 EOM 조건이 발생할 때까지 데이터 버퍼를 비우지 않습니다.
버퍼 지정 모드에서 실행하는 동안 EOM 조건이 발생하면 디바이스가 디바이스 데이터 버퍼를 비우려고 시도합니다. 나머지 계수는 버퍼 모드에서 쓰기 전송 길이를 초과할 수 있습니다. 일부 경우에, 잔류 데이터의 플러싱은 실제로 릴 (reel) 에서 테이프를 제거할 수 있다. 어느 쪽이든 실패로 간주되며 반환 값은 -1, errno 전역 변수는 EIO 로 설정됩니다. 이러한 오류는 사용자가 버퍼링되지 않은 모드에서 실행하도록 요구할 수 있습니다.
rmt 특수 파일 고려사항: 테이프를 읽거나 테이프에 쓰는 동안 디바이스를 재설정하는 데 실패하면 특수 파일을 닫고 작업을 다시 시작해야 합니다. 이 조건이 발생한 후부터 특수 파일이 닫힐 때까지 실행된 모든 명령어는 반환 값을 반환하며 -1, errno 전역 변수는 EIO로 설정됩니다. 재설정되지 않은 유형 오류 (즉, 매체 또는 하드웨어 오류) 로 인해 오류가 발생한 위치에 테이프가 남아 있습니다.
복수 테이프 작업의 경우, 각 테이프에 대해 특수 파일을 열고 닫아야 합니다. 특수 파일이 열리고 테이프가 변경된 경우에는 사용자가 계속할 수 없습니다.
테이프 장치 드라이버가 수신한 신호로 인해 현재 명령이 중단됩니다. 결과적으로, 애플리케이션은 드라이브 전원을 재순환하거나 제한시간 초과가 발생할 때까지 대기하지 않고 시간이 많이 소요되는 명령 (예: 지우기 조작) 을 정지합니다.
블록 크기 매개변수로 영 (0) 을 사용하면 블록 크기가 가변 길이임을 표시합니다.
ioctl 서브루틴
단일 ioctl 조작, IOCINFO는 ioctl 서브루틴을 사용하는 모든 장치 드라이버에 대해 정의됩니다. rmt 특수 파일의 경우 STIOCTOP 조작도 정의되었습니다.
IOCINFO ioctl 조작: IOCINFO ioctl 조작은 /usr/include/sys/devinfo.h 파일에 정의된 구조를 리턴합니다.
STIOCTOP ioctl 조작: STIOCTOP ioctl 조작은 지우기 및 리텐션과 같은 명령 실행 조작을 제공합니다. STIOCTOP 조작을 사용하는 ioctl 서브루틴에 대한 매개변수는 /usr/include/sys/tape.h 파일에 정의된 대로 stop 구조의 주소를 지정합니다.
다음에서 찾은 조작st_opstop 구조의 필드가 수행됩니다.st_count되감기, 지우기 및 리텐션 조작을 제외한 시간 사용 가능한 조작은 다음과 같습니다.
| 항목 | 설명 |
|---|---|
| STREW | 되감기. |
| STOFFL (STOFFL) | 테이프를 되감고 로드 해제하십시오. 장치를 다시 사용하기 전에 테이프를 삽입해야 합니다. |
| 단계 | 테이프를 지우고 로드 지점에 두십시오. |
| 문자열 표현식 | 테이프를 리텐션하십시오. 로드 지점에 두십시오. |
| STWEOF (STWEOF) | 쓰기 및 파일 끝 표시. |
| STFSF (STFSF) | 공간 파일을 전달합니다. |
| STFSR (STFSR) | 전진 레코드입니다. |
| STRSF | 파일을 반전시키십시오. |
| STRSR (STRSR) | 레코드를 반전시킵니다. |
| STDEOF (STDEOF) | 파일 끝 검사를 사용하지 않습니다. 주: STDEOF 명령을 사용하면 어플리케이션이 테이프 끝을 넘어 쓸 수 있습니다. STDEOF 명령을 실행하여 파일 끝 검사를 사용 불가능하게 하는 경우, 이 명령을 사용하여 발생할 수 있는 오류 조건에 대해 보호하는 것은 애플리케이션의 책임입니다.
|
오류 코드
ioctl, open, read및 write 서브루틴에 대해 나열된 일반 오류 코드 외에도 다음과 같은 특정 오류 코드가 발생할 수 있습니다.
| 항목 | 설명 |
|---|---|
| 다시 (EAGAIN) | 이미 열려 있는 디바이스에 대해 열기 조작을 시도했습니다. |
| EBUSY | 대상 장치가 다른 개시자에 의해 예약되었습니다. |
| EINVAL | O_APPEND 는 열려는 모드로 제공됩니다. |
| EINVAL | read 또는 write 서브루틴에 대한 nbyte 매개변수는 블록 크기의 짝수 배수가 아닙니다. |
| EINVAL | ioctl 서브루틴에 대한 매개변수가 유효하지 않습니다. |
| EINVAL | 요청된 ioctl 조작이 현재 장치에서 지원되지 않습니다. |
| EIO | 앞으로 또는 뒤로 이동할 수 없습니다.st_countEOM 조건 또는 파일 표시가 발생하기 전에 레코드를 기록해야 합니다. |
| EIO | 앞으로 또는 뒤로 이동할 수 없습니다.st_countEOM 조건이 발생하기 전에 파일이 표시됩니다. |
| 이미디어 | 테이프 장치에 복구할 수 없는 매체 오류가 발생했습니다. |
| ENOMEM | 테이프에서 가변 길이 레코드를 읽기 위해 요청된 바이트 수가 가변 길이 레코드의 실제 크기 (바이트) 보다 작습니다. |
| ENOTREADY | 드라이브에 테이프가 없거나 드라이브가 준비되지 않았습니다. |
| 엔시오 | 테이프가 EOM에 있는 동안 쓰기 조작이 시도되었습니다. |
| EPERM | 요청된 서브루틴에는 적절한 권한이 필요합니다. |
| 시간이 다 됐어 | 명령의 제한시간이 초과되었습니다. |
| 보호 | 읽기 전용 테이프에서 읽기/쓰기에 대한 열기 조작을 시도했습니다. |
| 보호 | 읽기 전용 테이프에서 매체에 영향을 주는 ioctl 조작이 시도되었습니다. |