1. LVM 이란?

LVM 은 Logical Volume Manager 의 약자로서, 저장장치들을 좀더 효율적이고 유연하게 관리할 수 있는 커널의 부분과 프로그램을 말한다. 처음에는 IBM에서 개발되었는데, 그후에 OSF(현재는 OpenGroup http://www.opengroup.org)에서 차용을 하여 OSF/1 operating system 에서 쓰였다. 지금은 HP-UX, Digital Unix operating system, AIX 등의 상용 유닉스에서 쓰고 있다. 리눅스 버전은 현재 HP-UX의 것을 모델로 하여 Sistina Software 사(http://www.sistina.com)에서 open source로 개발하고 있다.

장점

·쉬운 관리.
·서로 다른 많은 디바이스 조합 지원.
·직관적인 저장 장치로의 접근.
·뛰어난 확장성.
·믿을만한 안전성과 효율.
·스냅샷 기능 지원.

 

간단히 LVM을 쓰면 명령어로 손쉽게 파티션의 용량을 확장, 축소 할 수 있다.

또한 리눅스 설치시 파티션 구성이 익숙치 않은 사용자에게 자동으로 LVM구성을 제공한다.

다른 예로, 중소형 서버에서는 비교적 적은 비용으로 대용량 저장 장치를 구현하는 것이 가능해진다.

유지보수면에서 상당한 이득이 있을 것이다.

 

반대로 위와 같은 장점이 필요없는 환경의 서버를 구축할때에는 LVM의 사용을 가급적이면 자제하길 바란다.

왜냐하면 여러 파티션이 LVM으로 묶여 있는 상태에서 파일이 깨지면 복구시간이 길어져

부팅이 상당시간 지연 되거나 아예 부팅이 안되는 심각한 경우가 많기 때문이다.

 

*아래는 실제로 LVM구성의 파일시스템이 손상되어 부팅이 안되는 하드디스크의 복구과정이다.

 

 

다른 리눅스에서 마운트하여 복구하기>

*참고 : CentOS 환경에서 작업한 내용이니 다른 배포본은 출력 및 명령어가 다를수 있습니다.

 

1. 먼저 연결된 하드디스크를 확인한다.

#fdisk -l

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14      121601   976655610   8e  Linux LVM

Disk /dev/sdb: 1000.2 GB, 1000203804160 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1          13      104391   83  Linux
/dev/sdb2              14      121601   976655610   8e  Linux LVM
 
*참고 : 용량 1TB 하드디스크 2개중 /dev/sda는 현제 부팅된 리눅스이고
/dev/sdb는 파일 시스템이 손상된 하드디스크이다.
 
 
 
 
2. 리눅스 설치시 생성된 LVM의 Physical Volume을 조회한다.

#pvdisplay

  --- Physical volume ---
  PV Name               /dev/sdb2
  VG Name               VolGroup00
  PV Size               931.41 GB / not usable 5.24 MB
  Allocatable           yes (but full)
  PE Size (KByte)       32768
  Total PE              29805
  Free PE               0
  Allocated PE          29805
  PV UUID               KOLArN-gSYj-FRdf-MGTh-J8UC-nROm-9vDxpl

  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               VolGroup00
  PV Size               931.41 GB / not usable 5.24 MB
  Allocatable           yes (but full)
  PE Size (KByte)       32768
  Total PE              29805
  Free PE               0
  Allocated PE          29805
  PV UUID               uvSG5n-mFFu-IK6l-MMS0-Ya5v-h32L-IHpZbA

 

*문제 : 두개의 하드디스크가 같은 이름의 VG Name인 VolGroup00을 사용하고 있다.
(리눅스 설치시 자동으로 부여된 이름인 VolGroup00)

위중 하나는 현제 부팅중인 하드디스크의 VG Name이고,
다른하나는 손상된 하드디스크의 VG Name이다.

 

 

 

 

 

3. 같은 VG Name을 정확히 구분하기 위해 아래와 같이 VG UUID를 조회한다.

#vgdisplay

  --- Volume group ---
  VG Name               VolGroup00
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  ~생략~
  VG Size               931.41 GB
  PE Size               32.00 MB
  Total PE              29805
  Alloc PE / Size       29805 / 931.41 GB
  Free  PE / Size       0 / 0
  VG UUID               AMuyUg-e3sc-EGyf-Sm5H-Anqj-pGAQ-hbcKMw

  --- Volume group ---
  VG Name               VolGroup00
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  ~생략~
  VG Size               931.41 GB
  PE Size               32.00 MB
  Total PE              29805
  Alloc PE / Size       29805 / 931.41 GB
  Free  PE / Size       0 / 0
  VG UUID               zE0at1-Q3WR-NduG-yrrm-mu2N-FzoM-C6ruhl

 

 

 

 

 

4. 조회된 VG UUID로 VG Name을 바꾼다.

#vgrename AMuyUg-e3sc-EGyf-Sm5H-Anqj-pGAQ-hbcKMw 새로운볼륨그룹명
Volume group "VolGroup00" successfully renamed to "새로운볼륨그룹명"

 

*참고 : 하드디스크가 두개이기 때문에 하나만 바꾸어도 구분이 가능하다.

 

 

 

 

 

 

5. 잘 바뀌엇는지 PV, VG를 다시 조회한다.

#pvscan

  PV /dev/sdb2   VG 새로운볼륨그룹명  lvm2 [931.41 GB / 0    free]
  PV /dev/sda2   VG VolGroup00   lvm2 [931.41 GB / 0    free]
  Total: 2 [1.82 TB] / in use: 2 [1.82 TB] / in no VG: 0 [0   ]

#vgscan

  Reading all physical volumes.  This may take a while...
  Found volume group "새로운볼륨그룹명" using metadata type lvm2
  Found volume group "VolGroup00" using metadata type lvm2

 

 

 

 

6. 위에 출력된 새로운볼륨그룹명의 volume group을 활성화 시킨다.

#vgchange -a y 새로운볼륨그룹명
  2 logical volume(s) in volume group "VolGroup00" now active
 
 
 
 

7. 새로운볼륨그룹명의 logical volume 확인

#lvdisplay -v /dev/새로운볼륨그룹명
    Using logical volume(s) on command line
  --- Logical volume ---
  LV Name                /dev/새로운볼륨그룹명/LogVol00
  VG Name                VolGroup00
  LV UUID                qMijh0-YGOJ-3O2m-06yM-0GI3-vXt6-AmkLjJ
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                929.47 GB
  Current LE             29743
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Logical volume ---
  LV Name                /dev/새로운볼륨그룹명/LogVol01
  VG Name                VolGroup00
  LV UUID                i6QzKC-eS33-4oC2-iQ8a-eOvp-F6Rd-OOvzg5
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                1.94 GB
  Current LE             62
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

 

*참고 : 대부분의 배포판 설치시 자동파티션 방식인 LVM으로 설정하면
/boot 와 LVM 두개가 생성되고, LVM은 다시 /와 swap으로 생성됨
/dev/새로운볼륨그룹명/LogVol00 : /
/dev/새로운볼륨그룹명/LogVol01 : swap
 
 
 

8. 마운트 하기

#mount -t ext3 /dev/새로운볼륨그룹명/LogVol00 /mnt

mount: wrong fs type, bad option, bad superblock on /dev/새로운볼륨그룹명/LogVol00,
       missing codepage or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so

 

*참고 : 위와 같이 LVM 파티션이 손상되면 mount가 안된다.

 

 

 

 

9. 파일시스템 복구 작업을 해준다.

#e2fsck -y /dev/새로운볼륨그룹명/LogVol00

/dev/새로운볼륨그룹명/LogVol00 contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Error reading block 164867 (Attempt to read block from filesystem resulted in short read)
while doing inode scan. Ignore error? yes
Force rewrite? yes
Error reading block 164868 (Attempt to read block from filesystem resulted in short read)
while doing inode scan. Ignore error? yes
Force rewrite? yes
Error reading block 164869 (Attempt to read block from filesystem resulted in short read)
while doing inode scan. Ignore error? yes
Force rewrite? yes

……………………이하생략(오래걸림)

 

 

복구 실패시

*참고 : 백업 슈퍼블록을 이용한 파일 시스템 복구

 

 

10. 복구후 다시 마운트 하면 파일들이 있다.

*파일시스템이 모두 복구되어 부팅이 가능해도 사용을 권장하지 않는다.

왜냐면 파일시스템 오류가 빈번히 재발하여 위 과정을 다시해야 할수도 있기 때문이다.

파일 백업 후 포맷을 권장하며, 되도록이면 LVM방식이 아닌 수동 파티션 설정을 권장한다.

 

 

LVM에 대한 자세한 내용 더보기..

숨기기 «

 

2. 기본 지식

일반적으로 유닉스 시스템에서 저장 장치를 쓰는 방법은 그 장치의 블록 디바이스(Block Device)에 파일 시스템 (File System)을 만들어서 (다른 표현으로는 포맷(Format)한다라고 하지만 유닉스의 세계에서는 잘 쓰지 않는다.) 디렉토리에 마운트 시키는 것이다. 예를 들어, 두번째 버스의 프라이머리 ide 디스크의 첫번째 파티션에 reiserfs 파일 시스템을 만든 후, /debian/ftp 라는 디렉토리에 마운트를 시킨다면 다음과 같은 절차를 밟을 것이다.

# mkfs -t reiserfs /dev/hdc1
( 화면에 나오는 질문에 y 라고 답변 )
# mount -t reiserfs /dev/hdc1 /debian/ftp

 

lvm을 써도 마찬가지 절차를 밟는다. 단지, 실제 블록 디바이스가 아닌 가상의 블록 디바이스를 쓴다는 점이 틀리다.

 

< 그림 1 >
실제적으로 lvm은 커널에서 파일 시스템과 블록 디바이스 사이에 위치하여 동작한다. 일반적인 방식과 lvm에 의해 동작하는 방식의 차이는에 잘 나타나 있다.

lvm의 동작 방식의 이해와 활용을 위해서는 몇 가지 용어에 대한 사전지식이 필요하다.

 

1) VG, PV, LV

VG(Volume Group)은 LVM의 가장 기본적인 요소이다.

쉽게 말하자면 가상 디스크라고 할 수 있는데, 하나 이상의 실제 물리적으로 존재하는 블록 디바이스가 모여서 VG를 이루게 된다.

그 물리적인 블록 디바이스를 PV(Physical Volume)라고 하는데, 거의 대부분의 장치를 PV로 쓸 수 있다.

 

하드디스크 및 그 파티션, 소프트웨어/하드웨어 RAID 장치, 심지어 Loopback 블록 디바이스(파일 시스템상의 파일을 블록 디바이스처럼 쓸 수 있게 해준다)까지도 말이다.

PV와 대비되는 것이 LV(Logical Volume)이다.

이것은 가상 파티션이라고도 할 수 있는데, VG를 적당히 나누어 할당한 것이 LV이다.

사용자는 LV를 일반 디스크나 파티션처럼 쓰면 된다.

 

정리하자면,를 보면 알 수 있듯이, 하나 이상의 PV가 모여 VG를 이루고, VG를 가상적으로 나누어 할당하면 LV이 된다.

 

 

< 그림 2 >
참고적으로, 한 시스템에서 VG는 최대 99개까지 만들 수 있고, 하나의 VG에는 PV, LV 모두 최대 256개까지 할당할 수 있다.

 

 

2) PE와 LE

PE(Physical Extent)와 LE(Logical Extent)는 각각 물리적 할당단위와 논리적 할당단위를 뜻한다. 이 둘은 물리적인 위치나 크기는 같다.
그러므로 PE가 LV에 할당되면 LE가 된다라고 볼 수 있다.

를 보면 PE, LE의 관계가 잘 설명되어 있다.

 

< 그림 3 >

 

VG를 나누어 LV로 할당할 때 LVM은 하드디스크의 섹터처럼 작은 단위로 하지 않고 적당한 크기의 PE로 하게 된다. 그 이유는 할당단위가 극히 작으면, 할당정보가 엄청나게 커지고, 그에따라 시스템의 성능도 느려질 것이다. 또한 할당할 수 있는 크기에도 한계가 생길 것이다. PE의 크기는 VG를 만들 때에 정해지는데, 그에 따라서 VG의 최대 크기가 정해진다. 하나의 VG에는 65536개까지 PE를 할당할 수 있고, PE의 크기는 최소 8KB에서 2배씩 늘어나 최대 512MB까지이다. 그러므로 VG의 최대 크기의 범위는 최소 512MB(8KB x 65536)에서 최대 32TB(512MB x 65536)일 것이다.

 

3) VGDA

PV의 앞 부분에는 VGDA(Volume Group Descriptor Area)라는 부분이 있어서 VG의 모든 정보가 기록된다. 같은 VG에 속해 있는 PV들은 VGDA의 내용이 같다.

그 내용은, VG의 이름, 상태, 속해있는 PV, LV들, PE, LE들의 할당 상태 등이다. LVM은 이 VGDA 를 참조하고, 갱신하면서 모든 일을 수행한다.

 

4) Linear Mapping LV 와 Striped Mapping LV

앞서 언급한 대로 LVM은 소프트웨어 RAID를 어느 정도는 대체할 수 있다.

LVM에서는 두 가지 방식으로 LV를 만들 수 있는데, Linear RAID 와 대응되는 Linear Mapping 방식과 RAID Level 0 과 대응되는 Striped Mapping 방식이 그것이다.

두 방식의 차이점은 두개 이상의 비어있는 PV를 가지고 있는 VG에 LV를 할당할 때에, PE를 어떻게 배치시키는가 이다.

Linear Mapping 방식은 일반적인 것으로써, PE를 순차적으로 할당시킨다.

예를 들어의 왼쪽 그림을 보면, 각각 3개의 PE가 있는 PV1, PV2으로 이루어진 VG1에 4개의 LE를 가진 LV1을 할당한다고 할 때에, LVM은 먼저 PV1에 3개의 PE를 순차적으로 할당하고 나머지 1개의 PE는 PV2에 할당한다.

반면, Striped Mapping 방식은의 오른쪽 그림에 나타나 있듯이, 위에서와 같은 환경으로 할당한다고 할 때에, PE는 적당한 크기의 조각들(stripes)로 나누어진다. LVM는 그것을 두 PV에 분산하여 할당하게 된다. 그러므로 두 PV들에 할당된 PE의 갯수는 같다.

 

 

Striped Mapping 방식의 목적은 두개 이상의 PV를 동시에 읽고 씀으로서, 속도 향상을 바랄 수가 있다는 것이다. 물론, PV들이 서로 독립적인 장치이어야지, 같은 장치 내의 파티션들이라면 오히려 역효과가 날 것이다.

 

5) Snapshots

규모가 큰 시스템에서 서비스의 중지없이 백업을 할 때에 가장 큰 문제점이 백업도중에 데이터가 변경되는 것이다. 그러면 백업 자체가 무용지물이 될 수도 있기 때문이다.

그런 문제를 해결하려면 어느 시점에 데이터가 변경되지 못하게 고정시키는 것인데, 그런 기능을 구현한 것이 Snapshot LV이다.

Snapshot LV는 기존의 LV를 복사하며 별도의 읽기 전용의 LV를 만드는 것이기 때문에, 데이터 변경을 걱정하지 않고 백업을 마칠 수 있을 것이다.

 

 

3. LVM 사용법.

 

1) PV 초기화 및 생성

먼저 제일 처음에 해야 할 작업이 블록 디바이스를 PV로 초기화하는 것이다.

그러나 하드디스크의 경우 사전 작업을 해야 한다.

만약 파티션을 PV으로 만들 경우 그 파티션의 System ID가 0x8e 이어야 한다.

간단히 fdisk를 사용해서 /dev/hda2를 바꾼다면 다음과 같을 것이다.

# fdisk /dev/hda
Command (m for help): t
Partition number (1-6): 2
Hex code (type L to list codes): 8e
Changed system type of partition 2 to 8e (Linux LVM)

Command (m for help): w

 

그리고, 파티션을 나누지 않고 하드디스크 전체를 PV로 만들려고 할 때에, 파티션 정보가 기록되어 있다면 PV로 만들어지지 않을 것이다.

파티션을 fdisk등으로 전부 지워도 마찬가지인데 해결 방법은 dd등의 명령으로 파티션 정보를 깨끗히 지워주면 된다.

예를 들면 다음과 같다.

 

# dd if=/dev/zero of=/dev/sda bs=512 count=1

(**주의** 위의 명령은 한순간에 파티션 정보를 날리는 방법이다. 사용상의 특별한 주의가 필요하다.)

 

 

PV 를 만드는 명령은 pvcreate인데 사용법은 간단하다. 아래는 그 사용의 예이다.

# pvcreate /dev/hda2
pvcreate — physical volume “/dev/hda2”
successfully created

 

추가적으로, 권장하는 것은 특별한 이유가 없으면 하나의 하드디스크에는 두개 이상의 PV를 만들지 않는 것이 좋다.

관리적인 면이나 효율적인 면에서 이득이 많기 때문이다.

 

 

2) VG 만들기, 이름 바꾸기, 지우기

만들어진 PV들을 합쳐서 하나의 VG로 만드는 명령은 vgcreate이다.
아래는 그 예이다.

 

# vgcreate -s 16m new_vg /dev/sda /dev/sdb /dev/sdc

 

위의 명령은 세개의 SCSI 디스크를 합쳐서 new_vg라는 VG를 만든다는 것이다.
옵션 ‘-s 16m’은 PE의 크기를 16MB로 정하는 것인데, 만약 옵션 ‘-s’가 생략되면 기본적으로 PE의 크기는 4MB가 된다.

VG가 만들어지면 /dev/VolumeGroupName라는 형식으로 디렉토리가 생기게 된다. 위의 예에서는 /dev/new_vg 가 될 것이다.

VG의 이름을 바꾸려면 vgrename 이라는 명령을 아래와 같이 쓰면 된다.

# vgrename new_vg vg00

 

VG를 활성화 시키려면,

# vgscan

# vgchange -a y

 

비활성화시키는 방법은,

# vgchange -a n vg00

 

VG에 LV가 남아있지 않고 비활성화되어 있으면 vgremove로 지울 수 있다.

# vgremove vg00

 

 

3) VG 확장시키기, 축소시키기

VG의 확장과 촉소는 PV의 추가, 제거로 이루어진다.

VG에 PV를 추가하는 명령은 vgextend인데, vg00이라는 VG에 PV인 /dev/hda2를 추가하려면 다음과 같이 실행해야 한다.

# vgextend vg00 /dev/hda2

 

PV를 VG에서 제거하는 명령은 vgreduce이다. 그러나 PV에 PE가 할당되어 있으면 제거되지 않는다. 그 할당된 PE를 다른 PV로 옮겨야 제거될 것이다. 빈 PV인 /dev/hda2를 vg00에서 제거하려면,

# vgreduce vg00 /dev/hda2

 

 

4) LV 만들기, 이름 바꾸기, 지우기

VG에 LV를 만들면 /dev/VolumeGroupName/LogicalVolumeName의 형식으로 블록 디바이스가 만들어진다.

이것은 일반 블록 디바이스와 다를 바 없는 용도로 쓸 수 있다.

LV 를 만드는 명령은 lvcreate인데 일반적인 예는 다음과 같다.

# lvcreate -L 4g -n data vg00

 

위의 명령은 4GB 크기로 vg00이라는 VG에 data라는 새로운 LV를 만드는 것이다.

옵션 ‘-L’은 LV의 크기를 지정하는 것인데, 숫자 뒤의 접미사에 따라 숫자의 단위가 달라진다.

k는 KB, m은 MB, g는 GB, t는 TB를 뜻한다.

만약, 접미사가 안 붙어있으면 숫자의 단위는 MB가 된다. ‘-L’ 대신 ‘-l’를 쓸 수도 있는데, ‘-l’ 뒤에는 LE의 갯수를 쓰면 된다.

LV의 이름을 바꾸는 것은 아래의 명령처럼 간단하고,

# lvrename /dev/vg00/data /dev/vg00/db

 

지우는 것 또한 간단하다.

# lcremove /dev/vg00/db

 

 

5) LV 확장시키기

LV를 확장시키는 명령은 lvextend 인데, 다음은 그 예이다.

# lvextend -L +2g /dev/vg00/db

 

위의 명령은 /dev/vg00/db의 크기를 2GB 만큼 늘린다. 기존의 크기가 4GB 였다면, 옵션 ‘-L 6g’를 줬어도 같은 결과를 보일 것이다. 역시 여기에서도 옵션 ‘-l’를 쓰면 LE 단위로 늘릴 수 있다.

LV의 크기가 커졌어도 파일 시스템에는 영향을 주지 않으므로 파일 시스템 고유의 툴을 이용하여 확장 해주어야 한다.
한 가지 주의해야 할 것은 이렇게 크기를 늘릴 때 순서를 뒤바꾸면 절대 안 된다는 것이다. LV 확장 다음에 파일 시스템의 확장이다.

 

다음은 파일 시스템 별 확장 방법이다.

* ext2 : ext2 파일 시스템의 크기를 바꿀 수 있는 명령으로는 resize2fs이 있는데, e2fsprogs 1.19버전 이상에는 기본적으로 포함되어 있다. 그 이하의 버전을 쓴다면 ext2resize라는 프로그램을 다음의 사이트에서 구할 수 있다.

http://ext2resize.sourceforge.org

 

다음은 일반적인 ext2 의 확장 절차이다.

# umount /var/lib/mysql
# lvextend -L +10g /dev/databases/mysql
# resize2fs /dev/databases/mysql
# mount /dev/databases/mysql /var/lib/mysql

 

LVM tool에 포함되어있는 e2fsadm을 쓰면 LV 확장과 파일 시스템의 확장을 동시에 할 수 있다. 다음의 명령은,

# e2fsadm L +10g /dev/databases/mysql

 

다음의 두 명령과 같다.

# lvextend -L +10g /dev/databases/mysql
# resize2fs /dev/databases/mysql

* reiserfs : reiserfs는 resize_reiserfs 라는 명령으로 크기를 바꿀 수 있다.

 

마운트된 상태에서도 크기를 늘릴 수 있는데, 그 예는 다음과 같다.

# lvextend -L +5g /dev/devel/cvs
# resize_reiserfs -f /dev/devel/cvs

 

언마운트해서 늘리려면 다음 같이 한다.

# umount /var/cvs
# lvextend -L +5g /dev/devel/cvs
# resize_reiserfs -f /dev/devel/cvs
# mount /dev/devel/cvs /var/cvs

 

 

6) LV 축소시키기

lvreduce는 LV의 크기를 줄이는데, 늘릴 때와 마찬가지로 파일 시스템과 별개로 이루어지므로 데이터를 잃어버릴 수 있으니 상당히 조심해야 한다.

작업의 순서는 확장할 때와는 반대로, 파일 시스템의 축소 다음에 LV의 축소이다.

각 파일 시스템 별 축소 방법이다.

* ext2 : e2fsadm 을 쓰는 것이 간단하다.

# umount /home
# e2fsadm -L -2g /dev/vg00/home
# mount /dev/vg00/home /home

 

* reiserfs : 크기를 늘릴 때와는 달리 마운트 된 상태에서는 줄일 수 없다.

# umount /usr
# resize_reiserfs -s -1g /dev/vg00/usr
# lvreduce -L -1g /dev/vg00/usr
# mount /dev/vg00/usr /usr

 

 

7) 설정의 백업과 복구

 

LVM Tool들은 기본적으로 몇몇을 제외하고 동작 전의 설정상태를 자동으로 백업해둔다.(절대 데이터의 백업이 아니다!) 그 백업파일들은 /etc/lvmconf 라는 디렉토리에 VolumeGroupName.conf{,.[0-9].old}라는 이름으로 만들어진다. 뒤에 번호가 붙어있지 않은 것은 현재의 설정 내용이고, 그 번호가 클수록 오래된 내용이다. 그러므로 바로 전의 설정 내용을 담고 있는 파일에는 이름 뒤에는 .1.old가 붙어있다.

먼저 설정 백업 파일의 내용을 보려면 다음과 같이 한다.

# vgcfgrestore -f /etc/lvmconf/vg00.conf.1.old -ll -n vg00

 

이 파일을 이용해 설정을 복구하려면 다음과 같이 한다.

# vgchange -a n vg00
# vgcfgrestore -f /etc/lvmconf/vg00.conf.1.old -n vg00
# vgchange -a y vg00

 

 

5. 활용

몇 가지 유용한 활용 예를 보이겠다.

1) 두개의 ide disk를 하나의 striped mapping LV로 묶기

 

80GB 짜리(실제는 약 76.1GB) IDE 하드디스크 두 개를 striped mapping LV 로 묶는 과정이다.

먼저 블록 디바이스 이름이 /dev/hde, /dev/hdf 인 디스크들을 PV로 만든다.

# pvcreate /dev/hde /dev/hdf

 

그렇게 만든 PV들을 합쳐서 VG를 만든다.

# vgcreate vg00 /dev/hde /dev/hdf

 

이제 VG에 LV를 만든다.

# lvcreate -i 2 -I 4 -L 152g -n striped_lv vg00

 

위의 명령으로 152GB 짜리 striped mapping LV가 만들어진 것이다. 옵션을 설명하면 ‘-i 2’는 두개의 PV를 striped 하는데 쓰고, ‘-I 4’는 PE를 4KB로 쪼개서 PV들에게 저장한다는 것이다. ‘-I’ 옵션에는 2^n (0파일 시스템을 만들고, 마운트를 해서,

# mkreiserfs /dev/vg00/striped_lv
# mount /dev/vg00/striped_lv /mnt

 

bonnie++ 등의 벤치마킹 프로그랭으로 시험해본 결과, linear mapping LV보다 약 1.5배에서 1.8배까지 속도의 차이가 있었다.

물론 억세스가 많아지면 어떻게 되는지는 필자도 시험을 못했다.

 

2) 새로운 디스크로 PV 교체하기

하드디스크를 확장하면서 기존에 있는 하드디스크를 제거해야 할 때는 다음과 같은 과정을 거치면 된다.

환경은 /dev/hdd, /dev/sda, /dev/sdb가 vg01에 속해있는데, 그중에서 /dev/hdd를 빼고 /dev/sdc를 더하는 과정이다.

먼저 /dev/sdc 를 PV 로 만들고,

# pvcreate /dev/sdc

 

/dev/sdc를 vg01에 추가한 후에,

# vgextend vg01 /dev/sdc

 

/dev/hdd의 PE 들을 /dev/sdc로 옮긴다.

# pvmove /dev/hdd /dev/sdc

 

성공적으로 옮겨졌으면 vg01에서 /dev/hdd를 제거한다.

# vgreduce vg01 /dev/hdd

 

 

3) snapshot LV를 만들어서 안전한 백업하기

데이터의 변동이 많은 /var등의 디렉토리는 백업 도중에 데이터가 엉키는 수가 있다. 그것을 방지하기 위해서, snapshot LV를 만들어 데이터를 고정시킨 후 백업을 하면 된다.

일단 snapshot LV 를 만든다.(한 줄로)

# lvcreate -s -L 5g -n mysqlbackup /dev/vg01/mysql

 

위의 명령은 /dev/vg01/mysql에 대한 snapshot LV인 /dev/vg01/mysqlbackup를 만든다. 옵션 ‘-s’는 만들어질 LV가 snapshot 형식임을 정해주고 있다. 옵션 ‘-L’ 는 LV 의 최대 크기를 정해준다. 대게 원본 LV와 크기를 같게 하는 것이 좋다. 사실 snapshot LV는 원본이 갱신되는 부분만 고정시키려고 데이터를 가져와 LE에 할당하기 때문에 많은 LE가 필요하지 않다.

 

이제 만든 LV 를 마운트 시킨 후

# mount /dev/vg01/mysqlbackup /mnt

 

백업을 하면 된다.

# tar cf /dev/rmt0 /mnt

 

백업을 마쳤으면 언마운트시킨 후에 snapshot LV 을 지운다.

# mount /mnt# lvremove /dev/vg01/mysqlbackup



출처 : http://hungi.tk/it/os/linux/1800

Posted by 나랑살자

댓글을 달아 주세요

1. 문자열 찾기(영어 전용)

# grep -rw "찾는문자열" ./

2. 문자열 찾기

# grep -i -l "찾는문자열" * -r 2> /dev/null

2>/dev/null : 에러출력을 /dev/null 로 보내라는 의미

3. 문자열 찾기(한영 공용)

# find . -exec grep -l "찾는문자열" {} \; 2>/dev/null

4. 문자열 찾기(한영, 대소문자 무시)

# find . -exec grep -i -l "찾는문자열" {} \; 2>/dev/null

옵션 i는 대소문자를 무시하라는 의미

5. 문자열 찾은 후 치환

# find . -exec perl -pi -e 's/찾을문자열/바꿀문자열/g' {} \; 2>/dev/null

6. 파일 찾기

# find / -name 파일명 -type f

7. 파일 찾기(대소문자 무시)

# find / -iname 파일명 -type f

8. 디렉터리 찾기

# find / -name 파일명 -type d

9. 디렉터리 찾기(대소문자 무시)

# find / -iname 파일명 -type d

10. 하위 디렉터리에서 모든 파일 찾기

find . | xargs grep '파일명'



Posted by 나랑살자

댓글을 달아 주세요

1. sqlite 설치

# wget http://www.sqlite.org/sqlite-amalgamation-3.6.16.tar.gz

# tar xvfz sqlite-amalgamation-3.6.16.tar.gz

# cd sqlite-3.6.16

# ./configure

# make

# make install


2.  python 설치


1) 패키지 다운로드 작업 디렉토리 진입

# cd

# wget http://www.python.org/ftp/python/2.6.6/Python-2.6.6.tgz

# tar xvfz Python-2.6.6.tgz

# cd Python-2.6 


2) 기존 python 덮어 쓰지 않게끔 설정

# ./configure --prefix=/opt/python2.6 --with-threads --enable-shared


3) 컴파일 설치

# make

# make install


4) root .bash_profile 추가

alias python='/opt/python2.6/bin/python'


5) 심볼릭 링크 생성

# ln -s /opt/python2.6/bin/python /usr/bin/python2.6


6) 공용라이브러리 등록

# cat >> /etc/ld.so.conf.d/opt-python2.6.conf

/opt/python2.6/lib (hit enter)

(hit ctrl-d to return to shell)

# ldconfig


7) setuptool 설치

# cd

# wget http://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c9-py2.6.egg

# sh setuptools-0.6c9-py2.6.egg --prefix=/opt/python2.6

  

8) MySQLdb 패키지 설치:

# cd

# wget http://sourceforge.net/projects/mysql-python/files/mysql-python-test/1.2.3c1/MySQL-python-1.2.3c1.tar.gz/download

# tar xvfz MySQL-python-1.2.3c1.tar.gz

# cd MySQL-python-1.2.3c1

# python setup.py build

# python setup.py install

 

- 빌드 과정 에러가 발생하면 MySQL-dev 관련 패키지를 추가로 설치한다. (yum install mysql-dev*)

- $ python2.6 setup.py build  /usr/bin/ld: cannot find -lpython2.6 에러발생하면 python2.6 setup.py build_ext --library-dirs=/opt/python2.6/lib/ 시도

 

9) PIL(Python Image Library) 설치

# cd

# wget http://effbot.org/downloads/Imaging-1.1.6.tar.gz

# tar xvfz Imaging-1.1.6.tar.gz

# cd Imaging-1.1.6

# python setup.py install

 

10) 파이썬 2.6 설치 검증:

# cd

# python

Python 2.6.2 (r262:71600, Aug  5 2009, 00:51:31)

[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> import sqlite3

>>> import MySQLdb

>>> import Image

>>>

 

MySQLdb 임포트시 경고 메시지가 출력되는 경우가 있는데 재로그인 하면 사라진다. (이유는 모름. 누가 설명 .)


* Genshi

easy_install 설치시 버전이 설치되어 trac 에서 요구하는 버전을 설치 없다. 다운 받아서 설치.

# svn export http://svn.edgewall.org/repos/genshi/trunk genshi

# cd genshi

# python setup.py install


* 한글 설정을 위한 babel, Locale Data 설치.

babel 다운로드


# mkdir temp

# cd temp

# svn co http://svn.edgewall.org/repos/babel/trunk babel

# cd babel


* Locale Data 설치

# wget http://unicode.org/Public/cldr/1.6.1/core.zip

# unzip core.zip



* Element Tree 패키지 설치 - locale 적용을 위해 필요하다.

# easy_install ElementTree



* 빌드 설절 CLDR 데이터의 변환하고 설치를 진행한다.

# python ./setup.py egg_info

# python ./scripts/import_cldr.py ./   <-  ./ 설치 경로(babel 폴더에 core.zip 풀었으므로)


# python ./setup.py install

# python ./setup.py test   <- test




* 옵션 사항.

# easy_install pytz

# easy_install docutils

# easy_install epydoc

# easy_install Pygments


3.  mod_python 설치


yum install mod_python


하니 apache 같이 받아져서 다운 받아서 깔았다.


다운로드 : http://www.modpython.org/


# tar zxvf mod_python-3.3.1.tgz

#cd mod_python-3.3.1

#./configure --with-apxs=/usr/local/web/apache/bin/apxs --with-python=/usr/bin/python

#make

#make install


./configure 옵션은 자기 환경에 맞는 값을 넣어주면 된다.


make mod_python-3.3.1/src/connobject.c 부분에서 에러

mod_python-3.3.1/src/connobject.c 열어

while ((bytes_read < len || len == 0) &&

           !(b == APR_BRIGADE_SENTINEL(bb) ||

             APR_BUCKET_IS_EOS(b) || APR_BUCKET_IS_FLUSH(b))) {


하면 된다.



4.  trac 설치

# svn export https://svn.edgewall.com/repos/trac/trunk trac-trunk

# cd trac-trunk

# python ./setup.py complile_catalog --use-fuzzy   <= po 파일을 mo 파일로 변환.

# python ./setup.py install

# trac-admin --version



버전 확인하면 현재(trac-admin 0.12dev) 라고 뜬다.


5. trac와 svn, apache  연동

# mkdir /home/trac/test

# trac-admin /home/trac/test initevn

# chown apache.apache -R /home/trac/test



httpd.conf 수정


<Location /trac>

  SetHandler mod_python

  PythonHandler trac.web.modpython_frontend

  PythonOption TracEnv /home/trac/test

  #PythonOption TracEnvParentDir /home/trac  <= 첫페이지에 프로젝트 리스트가 뜬다.

  PythonOption TracUriRoot /trac/

</Location>



아파치 재실행후


http://localhost/trac 확인.


svn 연결이 제대로 안되어 있을 것이다.계정도 없고.


에러사항들

* 화면이 하얗게 나오고 로그에 아래와 같이 나올때

- Python에서 참조하고 있는 expat verison이랑 Apache 소스 컴파일시에 아파치에서 사용하는 expat library version 맞지 않으면 mod_python에서 문제가 발생한다.


해결방안.

mv /usr/local/apache2/lib/libexpat.so.0.1.0 /usr/local/apache2/lib/libexpat.so.0.1.0.old

ln -s /lib/libexpat.so.0.5.0 /usr/local/apache2/lib/libexpat.so.0.1.0


* mod_python 에러

페이지 마지막 줄에 db read _write 권한이 있어야 한다고 뜨는 경우. 기본 apache httpd.conf User, Group Daemon 으로 되어 있어서 그렇다.

apache 설정 주었으므로 부분을 수정하여 주면 된다.

mod_python 설정 참고 페이지 : http://trac.edgewall.org/wiki/TracModPython

Posted by 나랑살자

댓글을 달아 주세요

/sbin/chkconfig --add mysqld
Posted by 나랑살자

댓글을 달아 주세요

eth0 : 외부 (인터넷)
eth1: 내부(192.0.0.xxx)

vi /etc/rc.local
~~ 생략~~

#마스크레이딩 부분.
echo "1" > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

#아래는 포트 포워딩
#/sbin/iptables -A PREROUTING -t nat -p tcp --dport 9493 -j DNAT --to 192.168.1.2:9493
/sbin/iptables -A PREROUTING -t nat -p tcp -d 211.202.122.155 --dport 9493 -j DNAT --to 192.168.1.2:9493
/sbin/iptables -A OUTPUT -t nat -p tcp -d 211.202.122.155 --dport 9493 -j DNAT --to 192.168.1.2:9493


/sbin/iptables -A PREROUTING -t nat -p tcp -d 211.202.122.155 --dport 8001 -j DNAT --to 192.168.1.2:80
/sbin/iptables -A OUTPUT -t nat -p tcp -d 211.202.122.155 --dport 8001 -j DNAT --to 192.168.1.2:80
==============================================
사용: 리눅스에 2개의 랜카드를 장착합니다.
서로 다른 종류의 카드가 좋은듯 합니다.
3com 과 리얼텍 사용합니다. 전..

한쪽(eth0)은 일반적인 방법으로 인터넷 연결 하고 다른한쪽(eth1)에 192.168.1.1 의 아이피를 할당합니다. 인터넷 받는쪽 컴은 윈도로 가정합니다.


이걸 받는쪽 컴에선 192.168.1.XXX 등으로 받아 사용가능합니다.
포트포워딩 예제에선 192.168.1.2로 받아 사용할때를 가정한상태입니다.
받는컴의 게이트 서버가 192.168.1.1 이 됩니다.


포트포워딩엔 아래 처럼 쌍으로 만들어주더군여
211.202.122.155 아이피(리눅스의 아이피)의 9493으로 오는 포트를 
인터넷을 받은 윈도컴의 9493 포트로 보내는예제입니다.
/sbin/iptables -A PREROUTING -t nat -p tcp -d 211.202.122.155 --dport 9493 -j DNAT --to 192.168.1.2:9493
/sbin/iptables -A OUTPUT -t nat -p tcp -d 211.202.122.155 --dport 9493 -j DNAT --to 192.168.1.2:9493



예제하나더.. 이렇게 하면 리눅스 컴아이피로 접속해서 80을 열면 윈도의 웹이 열립니다.
/sbin/iptables -A PREROUTING -t nat -p tcp -d 211.202.122.155 --dport 80 -j DNAT --to 192.168.1.2:80
/sbin/iptables -A OUTPUT -t nat -p tcp -d 211.202.122.155 --dport 80 -j DNAT --to 192.168.1.2:80

'개발 > Linux' 카테고리의 다른 글

[Linux] Python 2.6 + trac 0.13 + apache + svn  (0) 2011.09.07
[Linux] System Service 등록  (0) 2011.02.28
[LINUX] 마스크레이딩과 포트포워딩.  (0) 2011.02.10
[LINUX] hostname 변경  (0) 2011.02.07
[LINUX] Subversion설치  (0) 2011.02.07
[LINUX] CentOS 5.5에 CMake 설치  (0) 2010.12.20
Posted by 나랑살자

댓글을 달아 주세요

/etc/sysconfig/network 에서 hostname을 변경

# echo 'hostname' > /proc/sys/kernel/hostname 으로 즉시 변경 가능

'개발 > Linux' 카테고리의 다른 글

[Linux] System Service 등록  (0) 2011.02.28
[LINUX] 마스크레이딩과 포트포워딩.  (0) 2011.02.10
[LINUX] hostname 변경  (0) 2011.02.07
[LINUX] Subversion설치  (0) 2011.02.07
[LINUX] CentOS 5.5에 CMake 설치  (0) 2010.12.20
[LINUX] FIND AND REPLACE with SED  (0) 2010.12.13
Posted by 나랑살자

댓글을 달아 주세요

1. 설치
yum -y install subversion

2. 데몬설정
- yum으로 설치한 경우 /etc/sysconfig/subversion, /etc/init.d/subverion 화일이 없다.
- 아래의 내용으로 만들도록 한다.

- svn repository의 위치는 OPTIONS 항목에서 변경하면 된다.

vi /etc/sysconfig/subversion

# Configuration file for the Subversion service
#
# To pass additional options (for instace, -r root of directory to # server) to the svnserve binary at startup, set OPTIONS here.
#
OPTIONS="--threads --root /home/svn/repos.d"



vi /etc/init.d/subversion

#!/bin/bash
#
#   /etc/rc.d/init.d/subversion
#
# Starts the Subversion Daemon
#
# chkconfig: 2345 90 10
# description: Subversion Daemon
 
# processname: svnserve
 
source /etc/rc.d/init.d/functions
 
[ -x /usr/bin/svnserve ] || exit 1
 
### Default variables
SYSCONFIG="/etc/sysconfig/subversion"
 
### Read configuration
[ -r "$SYSCONFIG" ] && source "$SYSCONFIG"
 
RETVAL=0
prog="svnserve"
desc="Subversion Daemon"
 
start() {
        echo -n $"Starting $desc ($prog): "
        daemon $prog -d $OPTIONS
        RETVAL=$?
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
        echo
}
 
stop() {
        echo -n $"Shutting down $desc ($prog): "
        killproc $prog
        RETVAL=$?
        [ $RETVAL -eq 0 ] && success || failure
        echo
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
        return $RETVAL
}
 
case "$1" in
        start)
        start
        ;;
        stop)
        stop
        ;;
        restart)
        stop
        start
        RETVAL=$?
        ;;
        condrestart)
        [ -e /var/lock/subsys/$prog ] && restart
        RETVAL=$?
        ;;
        *)
        echo $"Usage: $0 {start|stop|restart|condrestart}"
        RETVAL=1
esac
 
exit $RETVAL


3. 부팅시 시작 서비스로 등록
chmod 755 /etc/init.d/subversion
chkconfig --add subversion
chkconfig --level 345 subversion on
service subversion start

4. .bash_profile 수정
vi ~/.bash_profile

export SVN_EDITOR=/usr/bin/vim

'개발 > Linux' 카테고리의 다른 글

[LINUX] 마스크레이딩과 포트포워딩.  (0) 2011.02.10
[LINUX] hostname 변경  (0) 2011.02.07
[LINUX] Subversion설치  (0) 2011.02.07
[LINUX] CentOS 5.5에 CMake 설치  (0) 2010.12.20
[LINUX] FIND AND REPLACE with SED  (0) 2010.12.13
[LINUX] NFS 설치 및 설정  (0) 2010.11.11
Posted by 나랑살자

댓글을 달아 주세요

1. DAG Yum Repo 추가하기. 
]# vim /etc/yum.repos.d/CentOS-Base.repo 

[dag] 
name=Dag RPM Repository for Red Hat Enterprise Linux 
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag 
gpgcheck=1 
enabled=0 

2. DAG 용 RPM GPG 키 임력. 

]# rpm --import http://orion203.cafe24.com/RPM-GPG-KEY.dag.txt 

3. Cmake 설치. 

]# yum --enablerepo=dag install cmake 

'개발 > Linux' 카테고리의 다른 글

[LINUX] hostname 변경  (0) 2011.02.07
[LINUX] Subversion설치  (0) 2011.02.07
[LINUX] CentOS 5.5에 CMake 설치  (0) 2010.12.20
[LINUX] FIND AND REPLACE with SED  (0) 2010.12.13
[LINUX] NFS 설치 및 설정  (0) 2010.11.11
[LINUX] HDD 복사  (0) 2010.10.28
Posted by 나랑살자

댓글을 달아 주세요

FIND AND REPLACE with SED



Let us start off simple:
Imagine you have a large file ( txt, php, html, anything ) and you want to replace all the words "ugly" with "beautiful" because you just met your old friend Sue again and she/he is coming over for a visit.


This is the command:

CODE
$ sed -i 's/ugly/beautiful/g' /home/bruno/old-friends/sue.txt


Well, that command speaks for itself "sed" edits "-i in place ( on the spot ) and replaces the word "ugly with "beautiful" in the file "/home/bruno/old-friends/sue.txt"


Now, here comes the real magic:
Imagine you have a whole lot of files in a directory ( all about Sue ) and you want the same command to do all those files in one go because she/he is standing right at the door . . 
Remember the find command ? We will combine the two:

CODE
$ find /home/bruno/old-friends -type f -exec sed -i 's/ugly/beautiful/g' {} \;


Sure in combination with the find command you can do all kind of nice tricks, even if you don't remember where the files are located !


Aditionally I did find a little script on the net for if you often have to find and replace multiple files at once:

CODE
#!/bin/bash
     for fl in *.php; do
     mv $fl $fl.old
     sed 's/FINDSTRING/REPLACESTRING/g' $fl.old > $fl
     rm -f $fl.old
     done

just replace the "*.php", "FINDSTRING" and "REPLACESTRING" make it executable and you are set.

I changed a www address in 183 .html files in one go with this little script . . . but note that you have to use "escape-signs" ( \ ) if there are slashes in the text you want to replace, so as an example: 's/www.search.yahoo.com\/images/www.google.com\/linux/g' to change www.search.yahoo.com/images to www.google.com/linux




For the lovers of perl I also found this one:

CODE
# perl -e "s/old_string/new_string/g;" -pi.save $(find DirectoryName -type f)

But it leaves "traces", e.g it backs up the old file with a .save extension . . . so is not really effective when Sue comes around ;-/


출처 : http://www.nicegass.co.kr/52

'개발 > Linux' 카테고리의 다른 글

[LINUX] Subversion설치  (0) 2011.02.07
[LINUX] CentOS 5.5에 CMake 설치  (0) 2010.12.20
[LINUX] FIND AND REPLACE with SED  (0) 2010.12.13
[LINUX] NFS 설치 및 설정  (0) 2010.11.11
[LINUX] HDD 복사  (0) 2010.10.28
[LINUX] TIME SYNC  (0) 2010.10.28
Posted by 나랑살자
TAG find, replace, sed

댓글을 달아 주세요

NFS 설치

RPM 명령어 이용 패키지 설치 확인

# rpm -qa | grep nfs
nfs-utils-1.0.6-70.EL4

# rpm -qa | grep portmap
portmap-4.0-63

yum으로 설치
# yum install portmap nfs-utils* libgssapi

rpm 으로 설치시

# wget http://mirror.oss.or.kr/pub/centos/4.4/os/i386/CentOS/RPMS/nfs-utils-lib-1.0.6-3.i386.rpm
# wget http://mirror.oss.or.kr/pub/centos/4.4/os/i386/CentOS/RPMS/libgssapi-0.8-1.i386.rpm
# rpm -Uvh *.rpm

 

NFS 서버 데몬 구동

# ntsysv
--NFS, portmap 자동 실행, iptables 방화벽을 체크 해제하고 nfs를 체크한다.

# /etc/rc.d/init.d/portmap start
portmap (을)를 시작합니다: [  확인  ]

# /etc/rc.d/init.d/nfs start
NFS 서비스를 시작하고 있습니다:  [  확인  ]
NFS 쿼터를 시작하고 있습니다: [  확인  ]
NFS 데몬을 시작함: [  확인  ]
NFS mountd를 시작하고 있습니다: [  확인  ]

NFS 서버의 공유목록을 관리하는 파일
# vi /etc/exports

-공유디렉토리 접근할 호스트(옵션)

예) /home/www 192.168.1.1(rw,sync)
-> 192.168.1.1 호스트의 접속 허용

예)/home/www 192.168.1.0/255.255.255.0(rw,sync)
-> 192.168.1.* 호스트의 접속 허용

설정 옵션
rw : 읽기, 쓰기 가능
ro : 읽기만 가능
secure : 클라이언트 마운트 요청시 포트를 1024 이하로 한다.
noaccess : 액세스 거부
root_squach : 클라이언트의 root가 서버의 root권한을 획득하는 것을 막는다
no_root_squash : 클라이언트의 root와 서버의 root를 동일하게 한다
sync : 파일 시스템이 변경되면 즉시 동기화한다.
all_squach : root를 제외하고 서버와 클라이언트의 사용자를 동일한 권한으로 설정한다.
no_all_squach : root를 제외하고 서버와 클라이언트의 사용자들을 하나의 권한을 가지도록 설정한다. 





 

공유 디렉토리를 만든다
# mkdir data
# chomd 777 data

 
확인
# exportfs -v
/home/data      192.168.1.1(rw,wdelay,root_squash)
-나오지 않는다면 nfs 를 재가동 해보시길 바랍니다.
# /etc/rc.d/init.d/nfs restart

[exportfs 명령어 사용법]

exportfs 명령어는 nfs서버를 다시 시작하지 않고도 공유목록을 수정할 수 있다.
- a : /etc/exports파일을 읽어 들인다.
- r : /etc/exports파일을 다시 읽어 들인다.
- u IP:/디렉토리 : 입력한 디렉토리를 공유목록에서 제외한다.
- v : 현재의 공유 목록을 확인한다.

2. 클라이언트 서버
# mkdir /home/data

mount 명령어로 NFS 서버의 공유 디렉토리를 마운트 시킨다.

# mount -t nfs 192.168.1.1:/data /home/data

 

만약 마운트가 되지 않으면 방화벽 사용 중지 (서버쪽 클라이언트쪽모두)
# /etc/init.d/iptables stop

nfs 재가동(서버측)
# /etc/rc.d/init.d/nfs restart

마운트 확인
# cat /etc/mtab | grep /home/data
192.168.1.1:/home/data /home/data1 nfs rw,addr=192.168.1.1 0 0

 

# df -h
 Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2             6.8G  122M  6.3G   2% /
/dev/sda1              99M  8.5M   86M   9% /boot
none                  252M     0  252M   0% /dev/shm
/dev/sda8              54G   85M   52G   1% /home
/dev/sda7            1012M   34M  927M   4% /tmp
/dev/sda3             6.8G  919M  5.5G  15% /usr
/dev/sda5             3.9G   79M  3.6G   3% /var
192.168.1.1:/home/data
                       54G   85M   52G   1% /home/data1

부팅시 자동 마운트

# vi /etc/fstab

192.168.1.1:/home/data  /home/data              nfs     defaults        1 2

 

마운트 해제시
# umount /home/data

 

마운트가 안될때
마운트고 안될시 클라이언트 서버에도
NFS 설치 및 portmap 등 재가동 확인해보세요

'개발 > Linux' 카테고리의 다른 글

[LINUX] Subversion설치  (0) 2011.02.07
[LINUX] CentOS 5.5에 CMake 설치  (0) 2010.12.20
[LINUX] FIND AND REPLACE with SED  (0) 2010.12.13
[LINUX] NFS 설치 및 설정  (0) 2010.11.11
[LINUX] HDD 복사  (0) 2010.10.28
[LINUX] TIME SYNC  (0) 2010.10.28
Posted by 나랑살자
TAG install, Linux, nfs

댓글을 달아 주세요