유닉스의 장치구성
/devices/pci@1f,0/pci@1,1/ide@3/cmdk@0,0:a2
pci@ : bus 방식
ide@ : 컨트롤러
cmdk : 하드디스크 ide hdd는 dad , scsi는 sd 로 표기
인스턴트이름 cmdk0 : 시스템 커널이 이용 /etc/path_to_inst
/dev/dsk/c0t0d0s0 : d0는 무조건 0임 ( x86 시스템은 t0 생략 )
c0 : 컨트롤러 1번 ( ide는 마더보드에 하나의 컨트롤러 => c0, scsi는 여러개의 컨트롤러가 있다면 c0, c1 ..
t0 : target 1번 ( ide는 4개 ( Primary-master , slave , Secondary -master , slave )
scsi는 0~7 8개 scsi II는 16개 (0~15)
s0 : 파티션0번을 의미 ( 유닉스 파티션은 0,1,3,4,5,6,7 7개 2번은 디스크 전체를 의미)
--
prtconf 명령 : 시스템에 연결된 장치 출력 ( -v : 세부정보 )
# prtconf | grep -v not => 사용중인 장치만 출력 ( 단일명령은 사용하지 않는것도 모두 표시됨)
instance #0 는 1번 즉 1개라는 의미
--
devfsadm 명령 : 연결은 하였으나 인식되지 않는 장비 인식시키는 명령 (솔라리스 8버전 이상)
# devfsadm - i dad (또는 sd(cd-rom,scsi), st(tape device) 등) => 한번의 명령으로 장치인식
# devfsadm -c disk (또는 tape)
# prtconf | grep -v not
drvconfig 명령 : 동일 명령이나 후속명령이 따라야 함
# drvconfig -i dad (또는 sd(cd-rom,scsi), st(tape device) 등) => 후속명령 # disks , # tapes 명령을 추가
# disks ( tapes) => 하드디스크라면 disks 명령을 추가해야 장치가 인식됨
# prtconf | grep -v not
--
hdd 추가
--
hdd의 구조
- sector : 디스크 구성의 최소단위 유닉스에서는 block으로도 부름 보통 512byte로 구성
> VTOC : disk label 이라고도 하며 partition table이 저장되어 있다. 보통 헤더가 플래터에 처음 닿는 0번섹터를 의미 한다.
- track : sector로 구성된 하나의 띠
- cylinder : 몇개의 track의 묶음 ( 정보운영의 최소단위)
- slice : 몇개의 (임의조정) cylinder의 묶음 ( = partition)
--
장치구분의 타겟넘버 : 장치의 수를 의미 hdd의 갯수, cdrom의 갯수
ide방식 : 0~3 (4개) - primary master/slave , secondary master/slave
scsi방식 : scsi I : 0~7 (56핀 컨넥터사용 - nero방식) 8개중 하나는 컨트롤러사용 7개
scsi II : 0~15 (72핀 컨넥터사용 - wide방식) 16개중 하나는 컨트롤러사용 15개
참고 : scsi방식은 우선순위는 타겟넘버는 번호가 큰번에서 순위가 높다. 항상 최고순위는 컨트롤러이며 저속장치에 우선순위가 높은 번호를 부여한다. hdd는 0번이며 tape 6번등에 부여된다.
--
unix에서 hdd의 slice 구성
하나의 hdd의 파티션은 0,1,3,4,5,6,7 총 7개까지 나눌수 있으며 아래와 같은 용도로 사용한다.
0 : /
1 : swap
2 : overlap - 디스크전체를 의미 (예약)
3 : 임의사용
4 : 임의사용
5 : /opt ( /var) - 근래에는 /에 옮겨서 같이사용
6 : /usr - 근래에는 /에 옮겨서 같이사용
7 : /export/home
unix의 파티셔닝은 cylinder단위로 구성하는데 두번째 파티션의 시작 cylinder 번호는 항상 " 첫번째 실린더마지막 번호 + 1 " 로 중복이나 낭비를 막아야 한다. ( 항상 조심)
========================= 디스크추가 -> 장치인식 -> format -> newfs -> mount
format 명령 : unix의 파티션 명령
: format명령은 hdd의 vtoc에서 메모리로 불러와서 메모리에서 작업을 함 hdd에 파티션구성을 저장할때는 항상 format 내부의 명령인 label 명령을 실행해야 함
--
새로운 disk 추가 step
1. hdd 추가
2. # prtconf + grep -v not : 장치확인
3. # devfsadm -i sd : 인식안되었을때
4. # format
5. 디스크 선택
6. format > fdisk : 새로운 디스크는 0번 섹터가 없으므로 fdisk 먼저 실행
7. format > verify : hdd 정보 출력 0번섹터에서 불러옴 (물리 hdd에 적용된 내용)
8. format > partition
9. partition > print : hdd 정보 출력 메모리에서 불러옴 (물리 hdd와 다름)
10. partition > 0
11. partition > ? : ? 는 도움말 출력
12. enter paririon id tag [unassigned] : 추가디스크라면 기본값 unassigned 엔터
13. enter partition permission flag[wm] : 기본값 입력 (기본값은 wm:read-write 연결해제가능)
14. enter new starting cyl[0]: 기본값 입력 ( 단 두번째 파티션의 시작은 마지막실린더번호+1 )
15. enter partition size[0h,0c,0e,0.00mb, 0.00gb] : 용량지정 (MB, GB 가능 - 단 실린더로 바꾸므로 gap 발생)
16. partition > print : 적용한 내용 확인
17. partition > 3 : 3번 파티션 할당
18. enter paririon id tag [unassigned] : 추가디스크라면 기본값 unassigned 엔터
19. enter partition permission flag[wm] : 기본값 입력 (기본값은 wm:read-write 연결해제가능)
20. enter new starting cyl[0]: 두번째 파티션의 시작은 마지막실린더번호+1 )
21. enter partition size[0h,0c,0e,0.00mb, 0.00gb] : 용량지정 (MB, GB 가능 - 단 실린더로 바꾸므로 gap 발생)
22. partition > print
23. partition > label : 실제디스크에 적용
24. ready to label disk, continue? y 입력
25. partition > quit
26. foramt > verify : 실제디스크 파티션 확인
파티션 삭제는 동일과정으로 size를 0 입력
--
동일한 disk가 여러개일때는 위의 step을 여러번 반복해야 하는데 이때 동일한 파티션정보를 복사하고자할때
(단 동일제조사, 동일 용량, 동일 실린더 일때만 가능)
# format > disk : 디스크 지정 ( 원본으로 쓸 디스크)
# format > partition
partition > name
enter table name : 임의이름 입력 ex) test1
partition > quit
format > save
saving new ~ : /etc/format.dat 입력 (반드시 지정)
format > disk : 새로운 디스크를 지정
format > partition
partition > select
0:original
1:test1
specify table (enter its number[1]: 0 적용시킬 원본을 선택 ( 0번을 1번에 적용)
partition > print : 적용된것 확인
partition > lavel : 물리디스크에 적용
참고 : format 내부의 analyze 메뉴에서는 bad 섹터정보를 확인하는데 ( low format 진행)
메뉴에서 doesn't harm : 데이터에 영향없는것 (권장) -> (read, refresh, test)
corrupts data : 데이터에 변형이 됨 (데이터 못쓰게됨)
--
fmthard => name /save 대체명령 (역시 동일 디스크 동일 실린더이어야만 함)
# fmthard -s 장치파일 대상hdd : ex> fmthard -s /etc/format.dat /dev/rdsk/c1d1s0
--
prtvtoc : 파티션 정보보기 명령 (섹터단위로 보이는 명령) prtvtoc /dev/rdsk/c0d0s0 ( 장치파일 생성)
=> 주로 fmthard 명령을 수행하기 위해 쓰임
ex># prtvtoc /dev/rdsk/c0d1s0 > c0d1 => c0d1으로 장치파일 생성
# fmthard -s c0d1 /dev/rdsk/c0d1s0
===============
파일 시스템
==============
- ufs : unix file system : 유닉스에서 사용하는 파일시스템
- hsfs : cd-rom에서 사용하는 파일시스템
- pcfs : pc file system (diskette)
- udfs : universal disk file system => DVD rom
- nfs : 원격파일시스템 (공유파일시스템) - 네트웍을 통해 사용하는 system
- swapfs : 가상파일 시스템 ( 메모리의 파일시스템) - 메모리 작업영역
참고 - tmpfs : /tmp 디렉토리는 swap 영역의 일부공간을 이용 ( 메모리영역이기에 속도가빠르지만 휘발성임)
--
ufs (unix file system) : 디스크의 구조체를 만듬
0번 sector : vtoc정보
1~15번 sector : BOOT Block
16~31번 sector : Super Block
32번 이상 : super backup block, cylinder group block , i-node table
그외 DATA영역
minfree 영역 : 디스크의 끝부분에 root가 관리용도로 사용할수 있는공간 파티션의 1%~10%를 사용
위와 같은 형태로 2번째 파티션도 구조는 같다 단 vtoc는 없음
다른 디스크는 0~15번 섹터는 비어있고 그이후부터는 동일구조를 가짐
super block : 실린더 기초정보, 연결정보
super backup block : super 블럭의 백업
cylinder block : 각실린더그룹에 관련된 정보, i-node갯수
i-node table : inode와 file명 연력
파일을 지운다는것은 inode가 가진 포인터를 끊는것
======
newfs 명령 : 윈도우의 format명령으로 파티셔닝 된 공간에 파일시스템 작업을 함
# newfs /dev/rdsk/c0d1s0 ; 실린더 정보가 올라옴
# newfs -N /dev/rdsk/c0d1s0 ; simulation ( 실제적용은 안됨)
--
mount 명령 : 장치의 구성 ( format -> newfs 이후 장치를 시스템에 연결시킬때 사용하는 명령
'/' 디렉토리 하위에 /mnt 라는 디렉토리를 만들어 접속지점(마운트 포인트 - 임의생성가능 반드시 /mnt는 아님)을 만들어야 함 ( 디렉토리위에 파티션을 올리는 개념임)
df 명령 : disk용량확인 및 설치지점 확인 명령
# df -k : 전체크기 사용공간 여유공간 출력 ( Kbyte단위로 출력)
# df -h : 전체크기 사용공간 여유공간 출력 ( Mkbyte단위로 출력)
>> mount명령:
# mount 장치명 마운트지점 => 단일명령시엔 연결방식 연결내역만 출력
사용자에게 주는 옵션 /intr : 설정이 있다면 ctl-c 명령이 먹는다
/largefiles : 2G이상의 파일 인식
/onerror : pannic -> 심각한 에러발생시 해당시스템을 리부팅시킴 (vmcore 파일생성)
: lock -> 장치를 잠그어 버림
/dev = 198.126. . . device 정보
형식 # mount 장치명 마운트포인트
ex>
방법 1. # mount /dev/dsk/c0d0s3 /dir : c0d0s3를 /dir 디렉토리로 마운트시킴
방법 2. # mount /dev/dsk/c0d0s5 or # mount /dir1 : 먼저 /etc/vfstab 파일에 설정을 기록
/etc/vfstab 파일은 부팅시 점검하며 logging 파일이 있다면 점검안함 (부팅속도 증가)
방법 3. # mount -o ro /dev/dsk/c0d1s0 /dir2
-o : option을 만드는 옵션 , 뒷쪽에 오는것이 옵션이 됨
ro : read-only , rw은 read-write (생략하면 기본값으로 적용)
read-only 는 file server같은 경우 변형이 되면 안되는 곳에 쓰임 (root도 안됨)
no를 생략한 값은 생략시 기본적으로 들어가는 값
-o nosuid : setuid, gid 기능 비활성화(보안에 유리)
-o nologgin : 파티션에 문제가 있는지 없는지 점검하는 logging을 안쓰도록 설정함
-o nolargefiles : 2G이상 파일의 인식을 지원안함 (사용자 home 디렉토리에 설정할것)
-o noatime : 액세스시 액세스 하면서 변경되는 시간을 변경을 금지 (보안에 좋음)
-o attr : 솔라리스 8이상에서 추가보안모듈 사용 허용
여러개의 옵션 사용시 ' , '로 연결 # mount -o ro,nolargefiles,noatime ...
방법 4. /etc/vfstab에 정보가 설정이 되어있다면 # mountall 단일명령만 실행 -> 모든장비 마운트
단! mount시에 mount point에 특정유저가 있다면 mount가 안됨 (umount 도 안됨) 반드시 다른 디렉토리로 이동해야 함
파티션은 하나의 마운트지점에만 연결이 가능함 (디렉토리당 1개)
--
umount 명령 : 장치연결해제
# umount 마운트포인트 => ex> # umount /dir
/etc/vstab에 설정이 있다면 => ex> # umountall # df -h 명령으로 연결확인
--
/etc/vfstab 파일의 내용 (부팅하면서 자동실행됨)
# vi /etc/vfstab의 내용
dev/dsk/ ... dev/rdsk/.... 마운트포인트 점검우선순위 부팅후마운트 옵션
1) 2) 3) 4) 5) 6)
1) ->2) 점검한다는 의미
3) -> 1) 2) 점검하고 연결한다는 의미
5) no면 부팅시 연결안함
6) 안쓸때는 ' - '를 넣을 것 옵션을 넣을때는 -o 생략하고 ro,nolargefiles, ... 입력
--
마운트포인터에 사용자가 있어서 umount가 안될때
=> # umount -f /dir : 사용자가 사용중일때 강제적으로 umount시키면 DATA가 깨짐 (자주사용 권장 않음)
# mount [ -F ufs ] 생략가능 /etc/default.fs , /etc/dfs/fstype 에 미리 설정되어 있슴
[ nfs ] 생략가능 /etc/default.fs , /etc/dfs/fstype 에 미리 설정되어 있슴
-F hsfs : 반드시 지정해야함
pcfs : 반드시 지정해야함
udfs : 역시 지정을 해야 인식함
--
/etc/mnttab => #mount 단일명령에서 불러들이는 값임
이 파일은 log파일임 ( 중요하기때문에 /var 디렉토리가 아닌 /etc 디렉토리에 존재함)