sg3_utils
Cerberos
Techs절대로_찾을수_없을걸_JPG
이런 저런 용도로 JBOD이 리눅스에서 굉장히 많이 사용되고 있다. 뭐 물론 계속 사용 해 왔던 분들에게는 별 문제는 아니지만, 이제 막 이런 장비를 사용하여 Swift 등을 구현하다 보면 아주 간단한 장애 디스크 하나 찾는게 골치 아파질 때가 있다. 물론 디스크 하나 찾기위해 이 도구가 필요 한 것은 아니지만, 이러한 도구 없이 X Window의 힘을 빌리기란 시스템 하는 분들 입장에서는 여간 챙피한 일이 아닐 것이다. 아, 물론 그렇게 느끼시지 않는다면 관계 없다. 살포시 디스크 매니저를 찾아 보자.
제목에서와 같이, 이 오랜만의 포스팅은 sg3_utils 에 대한 내용을 설명한다. 아 물론, 친절하게 뭐가 뭐다 하고 설명하면 더 좋겠지만, 나는 여기서 더 친절하게 무려 sg3_utils 홈 페이지의 내용 중 가장 쓸만 하다 싶은 내용을 아예 번역을 해 버렸다. 물론 번역이 그다지 나이스한 품질은 아니지만, 일하다가 짬짬히 되는대로 써 놓은 것이기 때문에, 또 별도의 다른 번역 문서도 아직 존재하지 않는 듯 하기에 포스팅을 해 본다.
아 물론, 각 표에 있는 내용까지 번역을 했더라면 좋았겠지만, 그닥 시간이 허용하지 않아서... 한시간 동안 완전 날림 번역이지만 그래도 영어로는 죽어도 못 보겠다 하시는 분들만 보시면 된다.
sg3_utils 패키지는, 리눅스에서 디스크 관련 Low Level 작업을 할 때 꽤나 유용한 패키지다. 디스크가 두세개 정도 밖에 없다면 대략 무슨 디스크가 뭔 디스크인지 쉽게 알 테지만, 24개 48개 96개 이렇게 되어버리는 데다가 별도의 RAID 구성마저 하지 않는다면 골치가 아파질 것이다.
RAID도 없이 그렇게 무식하게 디스크를 쓰는데가 어디 있냐고 물으신다면 Swift 라 답하겠어효...
클라우드의 싸게 넣어서 준비시키고 쓰다가 쫑나면 교체해 버리고의 컨셉은 디스크 사용에도 적용되기 시작했다. 이는 바로 Swift 가 제공하는 '오브젝트 스토리지'라는 신개념 스토리지 (라고 쓰고 그냥 웹 파일 서비스 라고 읽는다) 에서는, 디스크에 별도의 볼륨 구성 없이 각 디스크를 생짜로 그냥 사용한다. 대부분의 시스템 관리자 분들 께서는 Writeback이니, ZFS의 log이니, RAID Level 이 어쩌고 저쩌고에 능통하시겠지만, 이 단순한 디스크+웹 서비스는 그 간단한 구성 만큼이나 디스크 구성도 간단하게 처리해 버린다.
따라서 별로 되게 어려울 것은 없지만, 리눅스 그 자체의 안정성이 쵸큼 중요하게 되는 것도 이 서비스라고 할 수 있겠다. Commodity Hardware 에서 어떠한 방법으로 안정성을 구가하는가가 오히려 더 중요한 포인트가 될 수도 있음이다.
아 물론, 우분투 LTS 버전이 무조건 안정적이다 하시는 분들도 계시고, 여기서 커널 바꾸면 세상 무너지는 줄 아는 분들도 계시긴 하지만, 그런 분들에게 이러한 Low Level 도구는 위험하므로 얼른 다른자료 찾아 보시길 권고한다. 물론, 그까이꺼 LED 따위 고장나면 바로 켜져야 하는거 아냐 하고 생각 하시는 분들 께서도 굳이 이런 난잡한 번역 읽느라 고생 하실 필요가 없음.
자꾸 새는데, 뭐 결국은 sg3_utils 로 해 볼 수 있는 것들이 많고, 보통 Production 단계 이전의 Dev나 STAG 환경에서 마음껏 가지고 놀아보는게 중요하겠다.
각설하고, 웹 버전으로 보고 싶으신 분들은 아래의 펼쳐보기를 누르시면 된다.
원래의 작업을 워드로 처음 해 봤더니, pdf 로 만들 수도 있어서 한번 만들어 봤다.
번역이 좀 구려도 대충 보시라.
The Linux sg3_utils package
원문 http://sg.danny.cz/sg/sg3_utils.html - intro
sg3_utils 은 SCSI 장치에 커맨드를 보내기 위한 도구를 포함한 패키지다. Fiber
Channel (FCP), SAS, SCSI Pararllel Interface(SPI) 등 SCSI
커맨드 세트를 사용하는 모든 장치에 사용이 가능하다. 또한, SCSI 커맨드 세트를 사용하도록 구성된 전송 계층 및 브릿지 장치를 사용하는 하드웨어들, 이를 테면 ATAPI 또는 SATA
와 같은 구성에서도 사용 할 수 있다.
SCSI 커맨드 세트는 크게 두 가지 부분으로 나뉘는데, 하나는 모든 장치가 공통적으로 사용하는 부분이며, 다른 하나는 장치별로 특별한 세트를 사용하는 부분이다. 공통적인
부분이라 함은 가장 최근의 SCSI 표준인 SPC-3 를
기반으로하는 SCSI 메인 커맨드 (SPC)를 의미한다. 이는, SPC-3에 의해 정의된 SCSI
INQUERY 커맨드를 구현해야 한다. 또한, SCSI
Block Command(SBC)는 디스크와 같은 직접 접근이 가능한 장치를 다루도록 한다. Multi
Media Commands(MMC)는 CD, DVD 및 BD
와 같이 미디어가 포함된 장치들을 다루도록 구성되어 있다. SCSI 커맨드 세트와 전송등에
대한 정의는 www.t10.org 에서 찾아 볼 수 있다. 이 사이트에서는 이러한 부분에
대한 개괄적인 내용을 다음의 링크 www.t10.org/scsi-3.htm 와 함께 확인 할 수 있겠다.
sg3_utils 패키지는 리눅스 커널 2.4와 2.6에서 동작하도록
개발 되었으며, 현재도 개발이 계속 진행 중이다. 예전의
리눅스 커널 2.2를 지원하던 버전은 sg_utils 라고
명명 되었으며, 일부는 커널 2.0 시리즈를 지원하기도 했다. 이 오래된 버전에 대한 정보는 다음의 링크 http://sg.danny.cz/sg/uu_index.html 에서 찾아 볼 수 있으므로 필요하면 참조 하도록 한다. 이
문서에서는 sg3_utils 의 버전 1.32에 대한 내용만을
기술하고 있다. 이 도구는 현재 FreeBSD, Solaris,
Tru64 및 Windows 시스템에 포팅 되어있다.
리눅스 커널 2.4 에서 이 sg3_utils 는 반드시 SCSI generic (sg) 드라이버
로 로드되는 장치와 함께 사용 해야 한다. (e.g. /dev/sg0 ) 리눅스 커널 2.6 에서는 일반적인 장치 이름(e.g. /dev/sda,
/dev/scd0, /dev/st0, /dev/hdd for ATAPI device)을 가진 대부분의 장치에 직접 사용 할 수 있다. 리눅스 커널 2.6.28 부터 bsg
장치들, 즉 (e.g. /dev/bsg/3:0:0:0) 와
같은 장치들에도 사용이 가능하다. 아울러, 다음의 링크 http://sg.danny.cz/sg/tools.html 에서 SCSI 관련
도구들의 목록을 살펴 볼 수 있으므로 참조 하도록 한다.
Contents of
sg3_utils
이 패키지는 대략 40여개의 도구들을 포함하고 있으며, man 페이지는 일반 문서를 제공한다. 이 도구들은 다음과 같은
일반적인 커맨드 라인 기반의 스타일을 통해 사용하면 된다.
UTILITY_NAME [OPTIONS] DEVICE
한번에 하나 이상의 장치 이름을 사용 할 수 없다. (일부
특수한 경우에는 장치 이름이 필요 없을 수도 있다. ) 아래의 목록은 sg3_utils 패키지가 포함한 도구를 알파벳 순서로 나타낸 것이다.
Table 1. Main utilities in
sg3_utils |
||||
Utility name |
Main SCSI commands |
CLI |
Ported |
Notes |
sginfo |
MODE
SENSE/SELECT, READ DEFECT |
adhoc |
|
symbolic
decoding (optional changing) of mode pages. Can also output (disk) defect
lists. Port of older scsiinfo utility. |
sgm_dd |
READ,
WRITE |
dd |
|
sg_dd
variant that uses memory mapped IO (only on Linux sg devices) |
sgp_dd |
READ,
WRITE |
dd |
|
sg_dd
variant that uses POSIX threads |
sg_dd |
READ,
WRITE |
dd |
|
Unix
dd command variant, uses SG_IO ioctl to send SCSI commands to copy
data. See the sg_dd page. Newer ddpt utility adds features and is ported
to "f,s,w" |
sg_decode_sense |
|
getopt |
f,s,t,w |
decodes
sense data given as a string of hexadecimal bytes or in binary |
sg_emc_trespass |
MODE
SELECT |
adhoc |
|
utility
specialized for EMC Clariion series |
sg_format |
FORMAT |
getopt |
f,s,t,w |
format
or resize a SCSI disk |
sg_get_config |
GET
CONFIGURATION |
getopt |
f,s,t,w
|
fetch
features and profiles of a cd/dvd drive and/or its current media |
sg_get_lba_status |
GET
LBA STATUS |
getopt |
f,s,t,w |
logical
block provisioning support |
sg_ident |
REPORT/SET
IDENTIFYING INFORMATION |
getopt |
f,s,t,w
|
default
is to report (fetch) the device identifier. With the '--set' option a new
identifier is sent to the device. |
sg_inq |
INQUIRY |
getopt+ |
f,s,t,w
|
fetch
standard response, VPD pages or version descriptors. Also can perform
IDENTIFY (PACKET) DEVICE ATA command. VPD page decoding also performed by
sg_vpd and sdparm. |
sg_logs |
LOG
SENSE |
getopt+ |
f,s,t,w
|
fetch
log sense pages, decode standard and some vendor pages |
sg_luns |
REPORT
LUNS |
getopt |
f,s,t,w
|
fetch
luns reported by a device (lun 0 or "well known lu") |
sg_map |
INQUIRY |
adhoc |
|
shows
mapping between sg devices and primary device node (if any). In lk 2.6 see lsscsi . |
sg_map26 |
|
getopt |
|
maps
between single Linux sg device and primary device node (and vice versa). Also
does mapping in to, and out of, sysfs. For the Linux 2.6 series. |
sg_modes |
MODE
SENSE |
getopt+ |
f,s,t,w
|
fetch
mode pages (output mainly in hex, to decode output use sdparm) |
sg_opcodes |
REPORT
SUPPORTED OPERATION CODES |
getopt+ |
f,s,t,w |
fetch
supported SCSI commands or supported task management functions |
sg_persist |
PERSISTENT
RESERVE IN/OUT |
getopt |
f,s,t,w
|
control
persistent reservations and report reservation status |
sg_prevent |
PREVENT
ALLOW MEDIUM REMOVAL |
getopt |
f,s,t,w
|
control
media removal, mainly for those SCSI devices which have removable media (e.g.
CD/DVD and tape drives) |
sg_raw |
<user
specified> |
getopt |
f,s,t,w |
send
user supplied cdb |
sg_rbuf |
READ
BUFFER |
getopt+ |
|
read
from SCSI device cache. Typically for testing the SCSI transport (for
throughput or errors) |
sg_rdac |
MODE
SENSE/SELECT |
adhoc |
f,s,t,w |
display
or modify RDAC redundant controller mode page |
sg_read |
READ |
dd |
|
read
continually from same offset. Syntax similar to sg_dd (without write side).
Can test SCSI device cache and transport performance. |
sg_readcap |
READ
CAPACITY |
getopt+ |
f,s,t,w
|
fetch
the number of blocks and the individual block size for disks and CD/DVD media |
sg_read_buffer |
READ
BUFFER |
getopt |
f,s,t,w |
read
descriptors or data |
sg_read_long |
READ
LONG |
getopt |
f,s,t,w
|
read
data from given LBA which includes the block and ECC data. |
sg_reassign |
REASSIGN
BLOCKS |
getopt |
f,s,t,w
|
reassign
a LBA from one sector on a disk (typically damaged) to a new (spare) sector.
User data copied if it is recoverable. |
sg_referrals |
REPORT
REFERRALS |
getopt |
f,s,t,w |
report
data segment accessibility from target port groups |
sg_requests |
REQUEST
SENSE |
getopt |
f,s,t,w
|
fetch
sense data from the given device. Modern uses include getting a progress
indication (e.g. during a format) or finding the power condition state. |
sg_reset |
- |
adhoc |
|
Issue
a driver, (SCSI) bus or device (target or lun?) reset. |
sg_rmsn |
READ
MEDIA SERIAL NUMBER |
getopt |
f,s,t,w
|
Relatively
new command added to SPC-3. Format of response is vendor specific so this
utility outputs it in hex (default) or binary. |
sg_rtpg |
REPORT
TARGET PORT GROUPS |
getopt |
f,s,t,w
|
Specialized
for multi-ported SCSI devices where one port (or a group of them) is
preferred for IO over another (or others). |
sg_safte |
READ
BUFFER |
getopt |
f,s,t,w |
fetch
information from a SAF-TE processor |
sg_sanitize |
SANITIZE |
getopt |
f,s,t,w |
Send
SCSI SANITIZE command |
sg_sat_identify |
ATA
PASS-THROUGH |
getopt |
f,s,t,w |
Send
ATA IDENTIFY DEVICE or IDENTIFY PACKET DEVICE commands via the SAT ATA PASS-THROUGH
(16 or 12) SCSI command. |
sg_sat_phy_event |
ATA
PASS-THROUGH |
getopt |
f,s,t,w |
Sends
an ATA READ LOG EXT command via a SAT to fetch log page 11h which contains
SATA phy event counters. |
sg_sat_set_features |
ATA
PASS_THROUGH |
getopt |
f,s,t,w
|
Sends
ATA SET FEATURES command via SAT |
sg_scan |
[INQUIRY] |
adhoc |
Linux |
maps
each sg device name to the corresponding numeric <host, channel, target,
lun> tuple. In lk 2.6 series the "lsscsi -g" command is similar. |
sg_scan |
[INQUIRY] |
getopt |
win32 |
shows
one device per line, with the device's various names and INQUIRY response
string on that line. |
sg_senddiag |
SEND
DIAGNOSTIC |
getopt+ |
f,s,t,w
|
Issues
either a default self test or a short/extended foreground/background self
test. With no arguments it uses RECEIVE DIAGNOSTIC RESULTS to list all
supported diagnostic pages. |
sg_ses |
SEND/RECEIVE
DIAGNOSTIC |
getopt |
f,s,t,w
|
Fetches
status diagnostic pages from, and sends some control pages to, a SCSI
Enclosure Services (SES) device. |
sg_start |
START
STOP UNIT |
getopt+ |
f,s,t,w
|
Controls
the power condition state of a SCSI device. Primary use is to spin up and
down SCSI disks. Can also load and eject removable media. |
sg_stpg |
SET
TARGET PORT GROUPS |
getopt |
f,s,t,w |
Specialized
for multi-ported SCSI devices where one port (or a group of them) is
preferred for IO over another (or others). |
sg_sync |
SYNCHRONIZE
CACHE |
getopt |
f,s,t,w
|
Causes
disk caches to be flushed to media |
sg_test_rwbuf |
READ/WRITE
BUFFER |
getopt |
|
Random
pattern written to SCSI device buffer then read back and checked. Used in
testing for data corruption. |
sg_turs |
TEST
UNIT READY |
getopt+ |
f,s,t,w
|
Issue
one or more Test Unit Ready commands. Can be used to time SCSI command overhead. |
sg_unmap |
UNMAP |
getopt |
f,s,t,w |
logical
block provisioning support ("Trim" in the ATA world) |
sg_verify |
VERIFY |
getopt |
f,s,t,w
|
reads
indicated blocks on a SCSI disks, stops on the first error found. Does not
yield any data. Useful for media scans. |
sg_vpd |
INQUIRY |
getopt |
f,s,t,w |
Decodes
standard and some vendor Vital Product Data (VPD) pages. |
sg_write_buffer |
WRITE
BUFFER |
getopt |
f,s,t,w |
write
data; can be used to download firmware |
sg_write_long |
WRITE
LONG |
getopt |
f,s,t,w
|
writes
to a LBA, data which includes the block and ECC data. Suitable data typically
fetched by prior sg_read_long utility. |
sg_write_same |
WRITE
SAME |
getopt |
f,s,t,w |
writes
a single block to one or more (consecutive) LBAs. Also supports some logical
block provisioning options. |
sg_wr_mode |
MODE
SELECT |
getopt |
f,s,t,w
|
writes
mode pages supplied in ASCII hex (e.g. from "sg_modes -r") to
the SCSI device. See sdparm for another method of setting mode
page parameters. |
이슈가 될 만한 추가적인 SCSI 커맨드는 Main SCSI commands invoked 컬럼을 참조 하면 된다. 예를
들면, 많은 도구들에서 커맨드 라인에 지정한 장치에 대한 주변 장치를 찾아 내기 위해 SCSI INQUIRY 커맨드를 사용 하는 것과 같은 부분들이다. 위의
표에 리스트된 SCSI 커맨드들은 일부 특정한 장치 타입(e.g. 디스크의
FORMAT UNIT) 에만 관련이 되어 있으며, 이와 관련되지
않은 다른 주변 장치에 커맨드를 사용해서는 안된다. 이러한 내용에 대한 SCSI (및 ATA) 커맨드를 확인 하기 위해서는 메인 디렉토리에
포함된 COVERAGE 파일을 참조 하도록 한다.
테이블 1에 열거된 모든 도구들의 소스코드는 src 서브 디렉토리에 존재 한다. 이전 버전, 즉 1.25 에서는 이 소스 파일들은 메인 디렉토리에 존재 했었음을
참조 한다. 위의 리스트된 각 도구에 맞는 ‘man’페이지, 즉 도움말은 doc 서브 디렉토리에 있으므로 참고 하도록 한다.
위의 표에서 CLI 컬럼은, 각 도구가 가지고 있는 Command Line Interface 의
종류를 표시하고 있다. getopt_long() 함수를 사용하는 최근의 CLI 도구들은 옵션의 사용에 긴 옵션 (e.g.’--vervose’) 와
짧은 옵션 (e.g. ‘-v’) 를 함께 제공한다. 위의
표에서 getopt 로 표시된 sg3_utils에서는 이와
같은 길어진 옵션을 지원하므로, 필요한 경우 손쉽게 사용 할 수 있을 것이다. 이와는 별도로, ‘adhoc’ 으로 표시된 오리지널 도구들은 이러한
옵션의 사용에 별로 일관성이 없으므로, ‘-‘ 또는 ‘--‘ 로
시작되는 옵션을 구분해서 사용 할 필요가 있다. 또한, 유닉스의
dd 명령어와 연관된 도구들이 있는데, 이들은 dd의 다소 변덕스러운 CLI 를 공유하도록 되어있다. 마지막으로, 자주 사용되던 기존의 도구들 중 ad hoc 으로 지정된 CLI를 사용하는 도구들은, getop_long() 을 사용하도록
sg3_utils 버전 1.23 에서 변경 되었다. 이 도구들 중에는 sg_inq, sg_logs, sg_modes 와
같은 것들이 있다. 이들은 기본적으로 getopt 를 사용하여
동작 하도록 되어 있지만, 필요한 경우 “--old” 또는
“-O” 스위치를 가장 첫번째 옵션으로 사용하여 이전의 ad hoc 옵션을
사용 할 수도 있다. 또는, 환경 변수 SG3_UTILS_OLD_OPTS 를 정의하여 자동으로 ad hoc 을
사용 할 수도 있을 것이다. 이러한 타입의 도구들은 표에서 “getopt+”로
표시되어 있으므로 참고 한다.
만약 Ported 컬럼이 공백으로 되어 있다면, 그 도구는 리눅스 환경에서만 동작 할 것이다. ‘f’ 는 FreeBSD를 의미하며, ‘s’ 는 Solaris, ‘t’는 Tru64(OSF) 그리고 ‘w’는 Windows 를 지원한다는 의미이다. 이에 대한 추가적인 정보는 README, README.freebsd,
README.solaris, README.tru64, README.win32 및 INSTALL 파일을
참고하기 바란다.
Table 2. Other utilities
in sg3_utils |
|||||
Utility |
Main SCSI commands |
directory |
CLI |
Ported |
Notes |
hxascdmp |
- |
utils |
adhoc |
f,s,w |
converts
stdin (assumed binary) to ASCII hex and ASCII, sending its output to stdout
(like the Unix od command and hexdump in BSD) |
rescan-scsi-bus.sh |
- |
archive |
adhoc |
|
copy
of Kurt Garloff's useful script |
scsi_inquiry |
INQUIRY |
examples |
adhoc |
|
uses
deprecated SCSI_IOCTL_SEND_COMMAND ioctl |
sdparm |
MODE
SENSE/SELECT, INQUIRY |
--> |
getopt |
f,s,t,w |
was
in the sg3_utils package for a short time; now in own package, see sdparm . sdparm manipulates mode
pages, reads VPD pages and sends simple commands |
sg_chk_asc |
- |
utils |
getopt |
f,s |
check
asc/ascq codes from www.t10.org page against sg3_utils
internal table |
sg__sat_identify |
ATA
PASS-THROUGH |
examples |
adhoc |
|
Simpler
version of sg_sat_identify that uses the Linux SG_IO ioctl directly. |
sg__sat_phy_event |
ATA
PASS-THROUGH |
examples |
getopt |
|
Simpler
version of sg_sat_phy_event |
sg__sat_set_features |
ATA
PASS_THROUGH |
examples |
getopt |
|
Simpler
version of sg_sat_set_features that uses the Linux SG_IO ioctl directly. |
sg_simple1,2,3,4,5 |
INQUIRY,
TEST UNIT READY |
examples |
adhoc |
|
Simple
code examples of using the scsi generic (sg) driver interface |
sg_simple16 |
READ |
examples |
adhoc |
|
Simple
code example of sending a 16 byte cdb SCSI READ command |
directory 컬럼에서는 서브 디렉토리의 이름을 볼 수 있을 것인데, 이는 명시된 각 도구의 소스코드가 존재하는
위치를 나타낸다. 이 서브 디렉토리에 있는 도구들 중 일부는 해당 디렉토리 안에 있는 Makefiles 를 사용하여 빌드 할 수 있을 것이다. 테이블 2 에서는 examples 서브 디렉토리에 있는 모든 코드가 리스트
되어 있지는 않다. 또한, 이들 도구들 중 일부는 ‘man’ 페이지를 가지고 있을 수도 있을 것이다.
이 단락에서는 리눅스에 특화된 정보를 제공한다. 테이블 1에 보여진 모든 SCSI 커맨드들 중 sgp_dd 의 예외를 포함하고 있는 것들은, SG_IO ioctl 의
이슈를 가지고 있다. sgp_dd 도구는 sg 드라이버의
메이저 장치 번호(e.g. “char” major 21)를 가지고 있는 디바이스 노드에 대해 sg 드라이버의 비동기 인터페이스를 사용 한다. 만약 SG_IO ioctl 를 지원하지 않는 장치에 이 도구를 사용 했다면, 이에
대한 메세지를 출력한 뒤에 종료 될 것이다. sg3_utils 의
1.27 버전에서는 bsg 지원에 대한 내용을 소개한다.
이 패키지를 소스코드로 부터 빌드 하는 경우, ./configure 단계에서 /usr/include/linux/bsg.h 의 헤더를 참조 하려 할 것이며, bsg
char 디바이스가 /proc/devices 파일에 있어야 한다. 이렇게 빌드된 도구를 사용하여 디바이스 필드에 명시한 장치의 char
major 번호가 bsg와 매칭 된다면, sg 버전 4 인터페이스를 통해 SG_IO ioctl 을 사용 할 것이다.
해당 디바이스가 ‘active’ 인 상태에서 인터페이스를
사용하지 않도록 조심해야 한다. 예를 들어 ‘sg_format -F’
유틸리티를 마운트 되어 동작중인 파일 시스템이 하나 이상 있는 디스크에 사용하는 것은, 아마도
굉장히 멍청한 짓이 될 것이다.
Sub
directories
sg3_utils 패키지는 아래의 단락에 설명되는 몇 가지의 하위 디렉토리를 가지고 있다. sg3_utils 버전 1.25의 경우, 메인 디렉토리에 포함된 Makefiles 에 정의된 코드만을 빌드한다. (1.25의 경우 소스파일이
메인 디렉토리에 위치 한다고 하였으므로, 이는 메인 디렉토리에 위치한 코드들 만 빌드한다는 의미이다.) 1.25 버전 부터는 빌드 파일들 (i.e. configure.ac,
Makefile.am, src/Makefile.am, include/Makefile.am, lib/Makefile.am,
doc/Makefile.am) 을 사용하여 각 서브 디렉토리, lib, src, doc,
include에 있는 파일들을 참조 하여 빌드 하도록 재구성 되었다.
archive 서브 디렉토리는 최근에 src 서브 디렉토리로 부터 제외된 코드들을 포함 하도록 디자인 되었다. 전체 패키지의 사이즈를 줄이기 위해서, 각 코드의 릴리즈 별로 패키지에
포함되는 코드들은 제외 될 수 있다.
debian 서브 디렉토리는 src 서브 디렉토리에 있는 소스 코드를 리눅스 데비안 패키지(i.e. ‘.deb’) 를 빌드 하는 룰을 포함 하도록 디자인 되었다. 메인
디렉토리의 build_debian.sh 스크립트를 데비안 패키지를 만드는데 사용 할 수 있다.
doc 서브 디렉토리는 README 파일을 포함 하고 있다. 이 README 파일은 sg3_utils 와 관련된 웹 문서가 있는 url에 대한 내용을 가지고 있다. 이 서브 디렉토리의 내용을 표시하기
위해 html 코드가 사용되었다. sg3_utils 버전 1.25 에서는 man 페이지의 소스가 이 디렉토리에 있다. 이 파일들은 “.8”의 확장자로 구성되어 있으며, 이는 man 페이지의 시스템 관리자 참조 부분에 sg3_utils 의 man 페이지가 추가 될 것임을 의미한다. 대부분의 일반적인 정보에 대해서는 man sg3_utils 를 참조
하면 된다.
examples 서브 디렉토리는 지원되는 운영체제에서 사용이 가능한 몇가지의 간단한 예제 코드를 포함하고 있다. 이
도구가 SCSI 관련 도구이므로, 대부분의 예제 코드들은 SCSI Pass-through 를 사용하여 장치에 접근하고자 하는 예제 일 것이다. 아울러, 공통 라이브러리 코드를 사용한 예제도 함께 포함되어 있다. sg_persist 도구에 대한 스크립트와 데이터 역시 포함되어 있다. 이
뿐만 아니라, sg_reassign 및 sg_sending 도구에
필요한 테스트 데이터도 함께 포함되어 있으므로 살펴 보도록 한다.
getopt_long 서브 디렉토리에는 Tru64(osf)에서 지원되지 않는
getopt_long() 라이브러리 콜에 대한 구현의 내용이 들어있다.
include 서브 디렉토리는 1.25 버전부터 추가 되었으며, C 헤더
파일을 포함한다. 이 헤더 파일들은 이 패키지에 포함된 많은 도구들에서 공통적으로 사용된다. C를 기반으로 코딩되었지만, C++에서도 문제 없이 컴파일 될 것이다.
lib 서브 디렉토리는 버전 1.25부터 추가 되었으며, 대부분의
도구에서 사용되는 C 소스 파일을 포함하고 있다. 타겟 아키텍쳐(대상 시스템)의 종류 및 설정 옵션에 따라, 라이브러리로 빌드되기도 한다. 모든 소스 파일들은 C와 C++에서 문제 없이 컴파일 되도록 코딩 되어있다.
src 서브 디렉토리 역시 1.25 버전부터 추가 되었으며, 주요한
도구들의 소스코드를 포함하고 있다. 대부분의 도구는 단일 C 소스파일로
코딩되었으며, 일부의 경우에는 여러 개의 파일을 참조 하기도 한다.
scripts 서브 디렉토리는 호환성 확인을 위한 스크립트 및 기타 잡다한 동작들을 처리하기 위한 스크립트들을 포함한다.
src 서브 디렉토리의 많은 도구들과는 다르게, 대부분의 스크립트는 여러 개의 장치 이름의
사용이 가능하다. 예를 들면, ‘scsi_stop /dev/sd*’ 의
경우에는, 모든 SCSI 디스크의 동작을 중지(spin down)하도록 할 것이다. 추가적인 설명을 원하는 경우 README 파일을 참조 하도록 한다.
Exit status
이 명령줄 기반 도구들은 정상적인 동작이 완료되어 종료하는 경우 0의 상태 코드를 리턴한다. 1.21 이전의 모든 버전들은 비정상적인
모든 프로세스 종료에 대해 1의 상태 코드를 가졌다. 이후의
버전에서는 sg3_utils 도구에 대한 보다 명확한 종료 처리 및 스크립트, 그리고 별도의 래퍼를 통해 세부 구현이 가능하도록 비정상적인 종료에 대한 에러코드를 세분화 하였으며, 이에 대한 표는 아래의 테이블 3과 같다.
이는 1.22 버전부터 제공 된다.
Table 3. Exit status values |
|
Exit |
Description |
0 |
no
error detected. Utility completed successfully |
1 |
syntax
error in command line options or their arguments, or an illegal combination
of options |
2 |
the
device reports that it is not ready for the operation requested. The device
may be in the process of becoming ready (e.g. spinning up but not at speed)
so the utility may work a little while later |
3 |
the
device reports a medium or hardware error (or a blank check). For example an
attempt to read a corrupted block on a disk will yield this value |
5 |
the
device reports an "illegal request" with an additional sense code
other than "invalid operation code". This is often a supported
command with a field set requesting an unsupported capability. For commands
that require a "service action" field (e.g. READ CAPACITY(16) )
this value can indicate that the command is not supported |
6 |
the
device reports a "unit attention" condition. This usually indicates
that something, unrelated to the requested command, has occurred (e.g. a
device reset) potentially before the current SCSI command was sent. The
requested command has not been executed by the device. Note that unit
attention conditions are usually only reported once by a device |
9 |
the
device reports an illegal request with an additional sense code of
"invalid operation code" which means that the device doesn't
support the requested command |
11 |
the
device (or transport) reports an aborted command. In some cases this can be
caused by congestion on the transport and retrying the command may be
successful |
15 |
the
utility is unable to open, close or use the given device. The given file name
could be incorrect or there may be permission problems. Adding the '-v' option may
give more information |
20 |
the
DEVICE reports it has a check condition but "no sense". Some
polling commands (e.g. REQUEST SENSE) can react this way. It is unlikely that
this value will occur as an exit status |
21 |
the
device reports a "recovered error". The requested command was
successful. Most likely a utility will report a recovered error to stderr and
continue, probably leaving the utility with an exit status of 0 |
33 |
the
command sent to the device has timed out. This occurs in Linux, in other
ports a command timeout will appear as a transport (or OS) error |
97 |
the
response to a SCSI command failed sanity checks |
98 |
the
device reports it has a check condition but the error doesn't fit into any of
the above categories |
99 |
any
errors that can't be categorized into values 1 to 98 may yield this value.
This includes transport and operating system errors |
위에 소개된 대부분의 종료 상태 코드는 재처리가 가능하므로, 도구의
실행을 하나 이상의 ‘-v’ 옵션과 사용하게 되면 보다 많은 정보를 얻을 수도 있겠다. 예를 들어, Unit attention(종료 상태 6) 의 경우 하나의 컨디션에 하나의 레포트만을 제공한다. 2~11과
같은 보다 낮은 종료 상태값은, SCSI 센스 키 값과 일치 한다는 것에 주의 하도록 한다. 이러한 종료 상태를 사용한 스크립트에 대한 자세한 예제에 대해서는
scripts 서브 디렉토리에 있는 쉘 스크립트들을 참조 하도록 한다.
Changing
mode page settings
SCSI 장치가 가지고 있는 설정(메타 데이터)는 사용자 프로그램 (“애플리케이션 클라이언트”라 불리는)이 mode page를 변경 함으로서 설정의 변경이 가능하다. 모드 페이지를 찾거나 이를 변경하는 것은 매우 일반적인 작업이다. SCSI 디스크의
캐쉬 관련 Writeback Cache Enable(WCE) 비트의 변경을 예로 들 수 있다. 일반적으로 제조사의 WCE설정은
(on)으로 되어있는 경우가 많지만, 일부 RAID 컨트롤러의
경우에는 off 로 되어 있을 수도 있다.
일반적으로 명령어 기반 도구는 사용이 어려운 경향이 다소 있다.
(모드 페이지 변경을 위한 SCSI 룰로 인한 작은 부분들) 리눅스에서 모드 페이지 변경을 위한 도구를 아래에 일부 설명 해 두었다.
l scsiinfo(old utility) 두가지의 중첩된
인자를 사용하는 다소 불편한 도구. (첫째 인자는 get, 두번재는 set) 유틸리티에 인식 될 수 있는 모드 페이지에 대해서만 변경이 가능하다.
l sginfo (scsiinfo 의 sg3_utils 버전) scsiinfo 와 동일한 수준으로 불편하지만, 업데이트된 모드 페이지에 대한 정보를 가지고 있음. 모드 서브 페이지와
같은 최신 기능을 지원
l sg_wr_mode (sg3_utils) ACSII hex 를 기반으로한 저수준 모드 페이지 설정 도구. sg_modes 를 사용하여 모드 페이지에 대한
정보를 변경이 가능할 것으로 추측되는 ACSII hex 형태로 리턴.
저수준 도구이지만 자주 사용됨.
l sdparm (sdparm) 모드 페이지 설정에 숫자화 된
어드레싱 또는 약어를 사용하는 도구. 모드 페이지 설정을 기본으로 되돌리는 것도 가능하다. 또한 사용자는 변경한 모드 페이지 값을 ‘저장’ 하도록 할 수도 있다. 숫자화 된 어드레싱은 임의의 필드에 대한
변경도 가능하다. ( sdparm의 경우 모드 페이지 및 모드 페이지의 필드 리스트에 대해 알지 못한다. )
l sgmode (scsirastools) “.mdf” 파일에 저장된 데이터를 통해 모드 페이지를 설정하는 방식으로 상호작용하는 도구. 대량의 디스크에
대한 지속적인 모드 페이지를 설정하는데 유용하지만, 세부 설정의 용도로 사용하기엔 까다롭다.
l hdparm (hdparm) ATA 및 SCSI 디스크에 대한 추상화를 제공하는 도구. 쓰기 캐쉬 와 같은
기능들을 이 도구를 통해 켜거나 꺼버릴 수 있지만, SCSI 장치의 모드 페이지 변경은 그다지 많이
지원하지 않는다.
l blktool (blktool) hdparm의 새롭고도 깔끔한
버전. 이는 커널 2.6시리즈에서 동작하며, SCSI 장치에 대해서는 아주 일부분의 (하지만 매우 중요한) 모드 페이지 변경만을 지원한다.
l vendor specific(e.g. 시게이트의 seatools) 일부 벤더가 지원하는 도구들. 해당 벤더가 아닌
경우에는 그다지 유용하지 않지만 일부 정보를 확인 할 수 있는 경우도 있다. 벤더와 맞는 장치의 경우
벤더가 지원하는 특수한 옵션의 설정이 가능하다. (예를 들면, 시게이트의 desktop/server 모드. 이 특수한 모드에 대한 설명은 sdparm의 man 페이지를 참조 하도록 한다. )
특수한 경우가 아니라면, 저자는 sdparm 의 사용을 권장한다.
별도의 정보 : 사용자가 변경 할 수 없는 메타 데이터의
경우, Virtual Product Data (VPD) 페이지에 저장되어 있다. VPD 페이지는 SCSI INQUERY 명령을 통해 접근이 가능하다. sg_vpd 및 sdparm 을
VPD 페이지 정보를 얻는 용도로 사용 할 수 있다.
Examples
아래의 대부분의 예제는 리눅스 장치 이름을 사용하고 있다. 다른
운영체제에서 사용되는 장치 이름에 대한 확인을 원하는 경우, 다음의 링크를 참조 하도록 한다.
http://sg.danny.cz/sg/device_name.html
모든 SCSI 장치들은 SCSI INQUIRY를 반드시 지원해야 한다. 모든 장치들은 ‘표준’ INQUIRY를 응답해야 할 의무가 있다. (Virtual Product Page 가 요청된 경우를 제외하고)
$
sg_inq /dev/sda
standard INQUIRY:
PQual=0 Device_type=0 RMB=0 version=0x03 [SPC]
[AERC=0] [TrmTsk=0] NormACA=0 HiSUP=1
Resp_data_format=2
SCCS=0 ACC=0 TGPS=0 3PC=0 Protect=0
BQue=0 EncServ=0 MultiP=0 MChngr=0
[ACKREQQ=0] Addr16=1
[RelAdr=0] WBus16=1 Sync=1 Linked=1 [TranDis=1]
CmdQue=1
Clocking=0x3 QAS=0 IUS=0
length=144 (0x90) Peripheral device type: disk
Vendor identification: SEAGATE
Product identification: ST318451LW
Product revision level: 0003
Unit serial number: xxxxxxxxx
일부 SCSI 장치들은 지원하는 표준에 대한 버전을
보여주기도 한다.
$
sg_inq -d /dev/sdb
standard INQUIRY:
PQual=0 Device_type=0 RMB=0 version=0x03 [SPC]
[AERC=0] [TrmTsk=0] NormACA=0 HiSUP=0
Resp_data_format=2
SCCS=0 ACC=0 TGPS=0 3PC=0 Protect=0
BQue=0 EncServ=0 MultiP=0 MChngr=0
[ACKREQQ=0] Addr16=1
[RelAdr=0] WBus16=1 Sync=1 Linked=1
[TranDis=1] CmdQue=1
Clocking=0x0 QAS=0 IUS=0
length=96 (0x60) Peripheral device type: disk
Vendor identification: FUJITSU
Product identification: MAM3184MP
Product revision level: 0106
Unit serial number: xxxxxxxxx
Version descriptors:
SAM-2 (no version claimed)
SPI-3 T10/1302-D revision 10
SPC ANSI X3.301:1997
SBC T10/0996-D revision 08c
최근의 대부분의 SCSI 장치는 VPD 페이지에 대한 요청도 지원한다. 가능한 VPD 페이지 리스트에 대한 정보는 다음과 같이 확인 할 수 있다.
$
sg_inq -e /dev/sg1
VPD INQUIRY, page code=0x00:
[PQual=0 Peripheral device type: disk]
Supported VPD pages:
0x0
Supported VPD pages
0x80 Unit serial
number
0x83 Device
identification
VPD 페이지의 디스플레이를 위해서는, sg_vpd 또는 sdparm
을 사용하는 것이 보다 좋을 수 있다. 이는 sg_vpd
가 보다 간단하고 사용이 편리하며, 일부 벤더에 종속적인
VPD 페이지에 대한 지원을 하기 때문이다.
#
sg_vpd /dev/sdh
Supported VPD pages VPD page:
Supported VPD pages [sv]
Unit serial number [sn]
Implemented operating definition (obs) [iod]
Device identification [di]
아래의 예제는 VPD 페이지의 장치 인식에 관한 정보를
보여주는데, 타겟 포트의 정보를 확인 할 수 있다.
#
sg_vpd --page=di_port /dev/sdh
Device Identification VPD page:
Target port:
designator type: Relative target port, code_set:
Binary
transport: Serial Attached SCSI (SAS)
Relative target port: 0x1
designator type: NAA, code_set: Binary
transport: Serial Attached SCSI (SAS)
0x5222222000000f9e
sg_scan 및 sg_map 도구는 리눅스 sg 장치들에 대한
관계를 보여주는데, 이는 <버스, 채널, 타겟, 룬> 의 형태이며 Primary 장치 노드의 이름을 보여준다.
예: 3개의
SCSI 장치 정보
$ cat /proc/scsi/scsi
Attached devices:
Host: scsi1 Channel: 00 Id: 00 Lun: 00
Vendor: SEAGATE Model:
ST318451LW Rev: 0003
Type:
Direct-Access
ANSI SCSI revision: 03
Host: scsi2 Channel: 00 Id: 04 Lun: 00
Vendor: PIONEER Model: DVD-ROM DVD-303 Rev: 1.10
Type:
CD-ROM
ANSI SCSI revision: 02
Host: scsi2 Channel: 00 Id: 06 Lun: 00
Vendor: YAMAHA Model:
CRW4416S Rev: 1.0g
Type:
CD-ROM
ANSI SCSI revision: 02
sg_scan 의 출력 정보
$ sg_scan
/dev/sg0: scsi1 channel=0 id=0 lun=0 type=0
/dev/sg1: scsi2 channel=0 id=4 lun=0 type=5
/dev/sg2: scsi2 channel=0 id=6 lun=0 type=5
INQUIRY 데이터의 확인은 ‘-i’ 스위치를 사용하면 된다. sg_map
도구는 scsi generic(sg) 장치 및 이와 대응하는 primary 장치 노드의 매핑을 보여준다. 일부 주변 장치 타입을
위해서, SCSI enclosure 와 같은, 매핑이 따로
없으며 인클로저 장치는 반드시 sg 장치 노드를 통해 접근해야 한다.
$ sg_map
/dev/sg0 /dev/sda
/dev/sg1 /dev/scd0
/dev/sg2 /dev/scd1
리눅스 커널 2.6에서는 sg_scan 및 sg_map이 primary
장치 노드 (/dev/sda) 에 직접적으로 작업을 수행하는 sg3_utils의 패키지들 처럼 그다지 중요하지는 않다. 하지만, sg 드라이버는 리눅스에서 별다른 드라이버가 없는 인클로저와 같은 장치들과 연동하기 위해 필요하다.
sg_persist 와 같은 도구를 사용하는 일부 예제는 examples/sg_persist_tst.sh 를 참조하면
된다. 이 도구에 대한 보다 자세한 정보는
examples/transport_ids.txt 를 찾아보도록 한다.
Windows버전의 경우 독자적인 sg_scan 도구를 가지고 있는데, 이는
일반적인 스토리지 장치를 한 줄에 하나씩 표시한다. 각 볼륨 네임은 스토리지 장치에 대응되며, 이는 []안에 나타난다. 아래의
두 예제를 통해 이를 확인 할 수 있으며, 두번째 예제는 버스 타입 필드가 추가 된 것이다.
$
sg_scan
PD0 [C] FUJITSU
MHY2160BH 0000
PD1 [DF]
WD 2500BEV External 1.05
WD-WXE90
CDROM0 [E] MATSHITA DVD/CDRW UJDA775 CB03
$ sg_scan -b
PD0 [C] <Ata
> FUJITSU
MHY2160BH 0000
PD1 [DF] <Usb >
WD 2500BEV External 1.05
WD-WXE90
CDROM0 [E] <Atapi> MATSHITA DVD/CDRW
UJDA775 CB03
PD0 장치명은 Physical Drive 0 의 줄임말이며, 이는
볼륨 C: 에 대응한다. USB로 연결된 PD1 은 Windows에 의해
D:와 F:로 인식된 두개의 파티션을 가지고 있다. 각
저장 장치 이름은 PD<n>, CDROM<n>, TAPE<n> 등으로
표시된다.
sg_ses 도구는 sg3_utils 1.32버전에서 대폭적으로 업그레이드 되었다. 이는 sg_ses 도구를 통해 일부 페이지와 특정 페이지의 켜거나
끄는 설정, 이를테면 LED 블링킹과 같은 동작을 엘레먼트 식별자 이름을 통해 ‘조인’의 형태로 수행 가능한
장점이 있다. SES 장치는 SAS 익스펜더로 확장된 장치이며, 장치 노드 /dev/sg3 ( 또는 /dev/bsg/6:0:3:0 ) 과 같다.
root@b:
# lsscsi -s 6
[6:0:2:0] disk SEAGATE
ST32000444SS 0006 /dev/sdc 2.00TB
[6:0:3:0] enclosu Intel
RES2SV240 0600 -
root@b: #
lsscsi -st 6
[6:0:2:0] disk
sas:0x5000c500215725bd
/dev/sdc 2.00TB
[6:0:3:0] enclosu sas:0x5001517e85c3effd
-
-
root@b: #
sg_ses /dev/sg3
Intel
RES2SV240 0600
enclosure services device
Supported diagnostic pages:
Supported diagnostic pages [0x0]
Configuration (SES) [0x1]
Enclosure status/control (SES) [0x2]
String In/Out (SES) [0x4]
Threshold In/Out (SES) [0x5]
Element descriptor (SES) [0x7]
Additional element status (SES-2) [0xa]
Supported SES diagnostic pages (SES-2) [0xd]
Download microcode (SES-2) [0xe]
Subenclosure nickname (SES-2) [0xf]
엘레먼트 식별자 페이지를 사용하여 작업을 시작해 보자.
root@b:
# sg_ses -p 0x7 /dev/sg3
Intel
RES2SV240 0600
enclosure services device
Element descriptor In diagnostic page:
generation code: 0x0
element descriptor by type list
Element type: Array device slot, subenclosure id: 0
Overall 0 descriptor: ArrayDevicesInSubEnclsr0
Element 0 descriptor: ArrayDevice00
....
Element 9 descriptor: ArrayDevice09
Element 10 descriptor: ArrayDevice0A
....
Element 16 descriptor: ArrayDevice10
Element 17 descriptor: ArrayDevice11
....
Element 23 descriptor:
ArrayDevice17
다소 요약되어 표시하긴 했지만, 이름 스키마는
“어레이 장치 슬롯” 및 인클로저에 다시 연결된 서브 인클로저(예제에서는 1대 뿐이다), 즉
“ArrayDevicesInSubEnclsr0”의 있는 24개의
“ArrayDevice”에 대해 0으로 시작하는 hex 카운터로 보여준다 (2 hex digits). SAS 익스펜더와 SES 드라이버의 매핑을 통해, 익스펜더의 phy7 이 SES 장치의 슬롯 7번과
대응 한다는 사실을 알 수 있다. 또한, 이는 리눅스에서
머신 a의 /dev/sdb, 머신 b의 /dev/sdc 임을 함께 확인 할 수 있다.
root@b:
# sg_ses -D ArrayDevice07 --join /dev/sg3
Intel RES2SV240
0600
enclosure services device
ArrayDevice07 [7] Element type: Array device slot
Enclosure status:
Predicted failure=0, Disabled=0, Swap=0, status: OK
OK=0, Reserved device=0, Hot spare=0, Cons check=0
In crit array=0, In failed array=0, Rebuild/remap=0, R/R
abort=0
App client bypass A=0, Do not remove=0, Enc bypass A=0, Enc
bypass B=0
Ready to insert=0, RMV=0, Ident=0, Report=0
App client bypass B=0, Fault sensed=0, Fault reqstd=0,
Device off=0
Bypassed A=0, Bypassed B=0, Dev bypassed A=0, Dev bypassed
B=0
Additional element status:
Transport protocol: SAS
number of phys: 1, not all phys: 0, device slot number: 7
phy index: 0
device type: end device
initiator port for:
target port for: SSP
attached SAS address: 0x5001517e85c3efff
SAS address: 0x5000c500215725bd
phy identifier: 0x0
이제 어레이(SGPIO 사이드밴드 시그널이
연결되어 있는, 이를테면 SFF 8087케이블)에서 디스크의 물리적 위치를 찾기 위해 아래의 Locate LED( ident로도
알려져 있다) 를 깜빡이도록 아래와 같이 수행한다.
root@b:
# sg_ses -D ArrayDevice07 --set=locate /dev/sg3
디스크의 위치를 찾았다면, 아래의 커맨드로 LED 깜빡임을 멈출 수 있다.
root@b:
# sg_ses -D ArrayDevice07 --clear=locate /dev/sg3
libsgutils
이 패키지에 포함된 여러가지의 도구들은 대부분 많은 코드를 공유한다. (e.g. SCSI INQUIRY 또는 SCSI 에러 프로세싱) 따라서, libsgutils 라 불리는 라이브러리를 만들었다. Unix의 표준에 따라 라이브러리는 두개의 부분으로 나뉘어진다. 메인
파트는 이 패키지에 포함된 도구들의 실행에 필요한 런타임이며, 두번째는 개발에 필요한 라이브러리의 API를 정의하는 헤더 파일이 포함된 부분이다.
라이브러리 API는 매우 안정적이기는 하지만, www.t10.org의 표준에 따라 변경되기도 한다. 가장 최신의 데비안 버전의 라이브러리 이름은 libsgutils2-2 이다. 또한, 일부 다른 패키지는 이 라이브러리에 의존성을 가지기도 한다.
공유 또는 정적 라이브러리는 기본으로 제공된다. 빌드
이전의 설정 단계에서 다음의 옵션을 사용함으로서 패키지에 포함된 각각의 도구가 공유 라이브러리를 참조 할 필요가 없도록 구성 할 수도 있다. './configure --disable-shared'.
Download
and build
sg3_utils의 일부 최신 버전은 아래의 표에 포함되어 있다. 모든
tarball은 README와 CHANGELOG(버전 1.25부터는 ChangeLog), INSTALL, COVERAGE,
CREDITS 파일 및 man 페이지를 포함하고 있다. 다음의
링크에서 가장 최신 버전의 ChangeLog를 확인 할 수 있다. http://sg.danny.cz/sg/p/sg3_utils.ChangeLog
Table 4. sg3_utils tarballs and packages |
||||
sg3_utils version |
tarballs * |
rpm source rpms ** *** |
i386 rpm binaries *** |
debian packages |
1.20 |
||||
1.21 |
||||
1.22 |
||||
1.23 |
||||
1.24 |
||||
1.25 |
||||
1.26 |
||||
1.27 |
||||
1.28 |
||||
1.29 |
||||
1.30 |
||||
1.31 |
||||
1.32 |
sg_utils-1.32exe.zip 파일은 Windows용 압축 파일이며, MinGW환경에서
구성되었다. sg3_utils_man_html.tgz파일은
man2html 도구로 기존의 man페이지를 html로
변경한 것이다.
버전 1.25의 설치는 autotool 를 사용하여 ‘./configure ; make ; make install’ 단계로
빌드하고 설치 할 수 있다. 이는 기존의 수동으로 작성된
Makefile 을 사용하는 방법을 대처 한 것으로, 사용이 매우 편리하다. configure.ac 및 Makefile.am 은 autotools를 사용한 빌드를 지원한다. 만약 이 파일들을 별도로
수정 했다면, ‘./autogen.sh’를 실행하여 변경사항을 반영해 주어야 한다. autotools는 기본적으로 src, lib, include 및 doc 와 같은 서브 디렉토리를 참조하여 sg3_utils에 포함된
도구들을 빌드한다. utils 및 examples 디렉토리는
아직까지 수동으로 작성된 Makefile을 사용한다. 만약 ./configure 또는 make 단계가 실패하게 된다면, ‘./autogen.sh’ 스크립트를 사용하여 autotools의
수많은 버전 및 알 수 없는 libtools 문제가 발견 될 것이다.
./configure 에는 수많은 옵션이 제공 되고 있으므로, ./configure --help 를
사용하여 어떠한 옵션을 제공하는지 확인 할 수 있다. 기본적으로
./configure 를 수행 하게 되면 Makefile을 생성하게 될 것이며, 패키지가 설치될 기본 디렉토리는 /usr/local 디렉토리가 될
것이다. 만약 이 기본 디렉토리를 /usr/bin 으로 변경하고
싶다면, ./configure --prefix=/usr ; make ; make install 을 수행
하면 된다.
! tarball은 “.tar.gz” 확장자 이외에도 bzip을 사용한
“.tar.bz2” 로도 배포된다. 1.31버전부터는 .xz 확장자도 지원한다.
아래에서는 리눅스 커널 2.2 및 일부 2.0 커널에서 사용 할 수 있는 가장 최신의 sg_utils 도구에
대한 링크를 제공한다. 물론, 더 이상의 업데이트는 없다.
Table 5. sg_utils tarballs and packages |
|||
sg_utils |
tarballs |
rpm source rpms ** |
i386 rpm binaries ** |
1.02 |
sg3_utils의 패키지는 http://freshmeat.net 에서도 찾을 수 있다.
마지막 업데이트: 3rd August 2011
Swift 에 대해서는 시간이 나면 따로 포스팅을..
(younjin.jeong@gmail.com, 정윤진)