OS/LINUX2023. 3. 7. 23:28
반응형

[해당 시스템 redhat 7.7 ]

버추얼 박스 7.0.6에 GUI 서버로 설치 한 후 게스트확장 이미지 설치 하려고 했으나 실패 

[root@redhat7 VBox_GAs_7.0.6]# ./VBoxLinuxAdditions.run
Verifying archive integrity...  100%   MD5 checksums are OK. All good.
Uncompressing VirtualBox 7.0.6 Guest Additions for Linux  100%  
VirtualBox Guest Additions installer
Removing installed version 7.0.6 of VirtualBox Guest Additions...
VirtualBox Guest Additions: Starting.
VirtualBox Guest Additions: Setting up modules
VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel 
modules.  This may take a while.
VirtualBox Guest Additions: To build modules for other installed kernels, run
VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup <version>
VirtualBox Guest Additions: or
VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup all
VirtualBox Guest Additions: Building the modules for kernel 
3.10.0-1062.el7.x86_64.

This system is currently not set up to build kernel modules.
Please install the gcc make perl packages from your distribution.
modprobe vboxguest failed
The log file /var/log/vboxadd-setup.log may contain further information.

 

[ make kernel-devel gcc perl 설치로 해결]

[root@redhat7 ~]#  yum install -y make kernel-devel gcc perl
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
local-repo                                                                                                                                      | 2.8 kB  00:00:00     
(1/2): local-repo/group_gz                                                                                                                      | 103 kB  00:00:00     
(2/2): local-repo/primary                                                                                                                       | 2.0 MB  00:00:00     
local-repo                                                                                                                                                   5229/5229
Package 1:make-3.82-24.el7.x86_64 already installed and latest version
Package kernel-devel-3.10.0-1062.el7.x86_64 already installed and latest version
Package 4:perl-5.16.3-294.el7_6.x86_64 already installed and latest version
Resolving Dependencies
--> Running transaction check
---> Package gcc.x86_64 0:4.8.5-39.el7 will be installed
--> Processing Dependency: cpp = 4.8.5-39.el7 for package: gcc-4.8.5-39.el7.x86_64
--> Processing Dependency: glibc-devel >= 2.2.90-12 for package: gcc-4.8.5-39.el7.x86_64
--> Running transaction check
---> Package cpp.x86_64 0:4.8.5-39.el7 will be installed
---> Package glibc-devel.x86_64 0:2.17-292.el7 will be installed
--> Processing Dependency: glibc-headers = 2.17-292.el7 for package: glibc-devel-2.17-292.el7.x86_64
--> Processing Dependency: glibc-headers for package: glibc-devel-2.17-292.el7.x86_64
--> Running transaction check
---> Package glibc-headers.x86_64 0:2.17-292.el7 will be installed
--> Processing Dependency: kernel-headers >= 2.2.1 for package: glibc-headers-2.17-292.el7.x86_64
--> Processing Dependency: kernel-headers for package: glibc-headers-2.17-292.el7.x86_64
--> Running transaction check
---> Package kernel-headers.x86_64 0:3.10.0-1062.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

=======================================================================================================================================================================
 Package                                   Arch                              Version                                       Repository                             Size
=======================================================================================================================================================================
Installing:
 gcc                                       x86_64                            4.8.5-39.el7                                  local-repo                             16 M
Installing for dependencies:
 cpp                                       x86_64                            4.8.5-39.el7                                  local-repo                            6.0 M
 glibc-devel                               x86_64                            2.17-292.el7                                  local-repo                            1.1 M
 glibc-headers                             x86_64                            2.17-292.el7                                  local-repo                            687 k
 kernel-headers                            x86_64                            3.10.0-1062.el7                               local-repo                            8.7 M

Transaction Summary
=======================================================================================================================================================================
Install  1 Package (+4 Dependent packages)

Total download size: 33 M
Installed size: 59 M
Downloading packages:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                   66 MB/s |  33 MB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : cpp-4.8.5-39.el7.x86_64                                                                                                                             1/5 
  Installing : kernel-headers-3.10.0-1062.el7.x86_64                                                                                                               2/5 
  Installing : glibc-headers-2.17-292.el7.x86_64                                                                                                                   3/5 
  Installing : glibc-devel-2.17-292.el7.x86_64                                                                                                                     4/5 
  Installing : gcc-4.8.5-39.el7.x86_64                                                                                                                             5/5 
  Verifying  : glibc-devel-2.17-292.el7.x86_64                                                                                                                     1/5 
  Verifying  : gcc-4.8.5-39.el7.x86_64                                                                                                                             2/5 
  Verifying  : kernel-headers-3.10.0-1062.el7.x86_64                                                                                                               3/5 
  Verifying  : glibc-headers-2.17-292.el7.x86_64                                                                                                                   4/5 
  Verifying  : cpp-4.8.5-39.el7.x86_64                                                                                                                             5/5 

Installed:
  gcc.x86_64 0:4.8.5-39.el7                                                                                                                                            

Dependency Installed:
  cpp.x86_64 0:4.8.5-39.el7        glibc-devel.x86_64 0:2.17-292.el7        glibc-headers.x86_64 0:2.17-292.el7        kernel-headers.x86_64 0:3.10.0-1062.el7       

Complete!

 

[게스트 이미지 설치 성공]

[root@redhat7 VBox_GAs_7.0.6]# ./VBoxLinuxAdditions.run
Verifying archive integrity...  100%   MD5 checksums are OK. All good.
Uncompressing VirtualBox 7.0.6 Guest Additions for Linux  100%  
VirtualBox Guest Additions installer
Removing installed version 7.0.6 of VirtualBox Guest Additions...
VirtualBox Guest Additions: Starting.
VirtualBox Guest Additions: Setting up modules
VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel 
modules.  This may take a while.
VirtualBox Guest Additions: To build modules for other installed kernels, run
VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup <version>
VirtualBox Guest Additions: or
VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup all
VirtualBox Guest Additions: Building the modules for kernel 
3.10.0-1062.el7.x86_64.
VirtualBox Guest Additions: Running kernel modules will not be replaced until 
the system is restarted

 

설치 완료

반응형

'OS > LINUX' 카테고리의 다른 글

linux root 패스워드 복구 방법  (0) 2011.05.21
[Linux] 설치 후 설정 변경  (0) 2010.08.11
Red Hat 에 yum 설치하는 방법 (다운부터 설치까지)  (0) 2010.07.09
ssh 포트 변경  (0) 2010.02.04
linux kernel panic에러시 복구  (0) 2010.02.02
Posted by [PineTree]
OS/LINUX2011. 5. 21. 20:04
반응형

사람의 기억력이 지구상의 동물들 중에서 제일 좋다고는 하지만, 그것이 까먹지 않음을 보장 하는 것은 아니다. 평상시 root계정으로 패스워드 쳐서 백만번씩 들어가던 사람도 순간 패스워드를 잊어 버릴 수 있다. “포맷 해버리면 그만이지 뭐!!” 라고 생각도 잠시, 이 컴퓨터 안에 수많은 야구 동영상이 들어있다는 생각에 이러지도 저러지도 못하는 상황이 발생한다. 이런 긴급상황에 어떻게 대처하는 지 알아보자.

준비물이 하나 있다. 부팅CD를 준비하도록 하자.

 

CD로 부팅하기 위해 각자의 메인보드에서 BIOS로 들어가는 키를 눌러 BIOS화면으로 들어간다.

boot탭에 CD-ROM이 보일 것이다. 이것을 부팅 우선순위 맨 위에다 놓는다. 그리고 F10을 눌러 저장하고 종료한다.

 
 

이제 다시 부팅한다.

새로이 뜨는 화면의 boot: 부분에 linux rescue라고 쓴 후 엔터를 누른다.

 

 
언어 선택으로 넘어간다. Korean이 있을 것이라는 기대는 금물. 세계 공통어 English를 선택한다.


 

Keyboard Type이다. 역시 us를 선택하자.

 

root암호를 해제하는 것에 network은 필요 없다. no를 선택하자.

 

 

/mnt/sysimage 디렉토리에 Linux 인스톨을 mount하겠다고 써있다. Continue를 누르면 마운트된 파일 시스템을 read-write, Read-only를 누르면 read만 하겠다고 한다. Skip를 누르면 바로 커맨드 창으로 간다고 한다. Continue를 누르자.

 
 

root환경으로 만들려면 나중에 commend창에 chroot /mnt/sysimage를 입력하라고 써있다. OK를 눌러 커맨드 창으로 가자.



이제 commend창이다. 위에서 입력하면 root환경으로 간다는 chroot /mnt/sysimage를 입력한다.

sh-3.2# chroot /mnt/sysimage

 


각 계정의 password가 있는 파일은 /etc/shadow이다. vi editor을 열어 들어가도록 하자.

sh-3.2# vi /etc/shadow

 


파일을 열면 맨 윗쪽에 root라고 써 있고, 콜론이 찍혀있다. 빨간 줄이 그어져 있는 부분이 암호화된 비밀번호이다. 이 부분을 다 지우도록 하자(빨간 줄 앞뒤의 콜론은 지우지 않도록 한다)



암호화된 비밀번호를 지운 후 vi commend mode에서
:wq!를 입력해서 저장한다. 읽기 전용의 파일이므로 끝에 느낌표를 붙이지 않으면 저장되지 않음을 유의하자.



 

                               (/etc/shadow : 저 읽기 전용이예요~ 그것도 root계정만!!)

 

Sync를 입력 한 후 reboot를 입력하여 재부팅 한다. 필자가 입력하려고 했던 init 0은 되지 않았다.

sh-3.2# sync

sh-3.2# reboot


 

부팅 처음 화면에서 BIOS로 가는 키를(필자는 F2) 입력하여 BIOS화면에 들어간다.

그 후 CD-ROM위에 hard drive를 두어 다시 부팅 되었을 때 도로 하드로 부팅되도록 한다. 다음과 같이 바꾼 후 F10키를 눌러 저장 후 종료한다.



다시 부팅되고 Linux의 유저 입력 화면이 나왔다. 이제 root 계정으로 접속 해 보자.

 


패스워드를 확인 하지 않고 바로 X 윈도우 화면으로 넘어 감을 확인 할 수 있다.

 


다시는 root 암호를 까먹지 않는다는 다짐과 함께 새로운 password를 입력 해 주자.


 

반응형
Posted by [PineTree]
OS/LINUX2010. 8. 11. 09:26
반응형



 0. 호스트명 변경 :: /etc/sysconfig/network 파일에서 수정이 가능하다.

 0. 설치 완료후 네트워크 설정 변경
   :: netconfig / ifconfig 등의 명령어를 이용
   :: etc/sysconfig/network, etc/sysconfig/network-script 의 파일 수정

 0. 설치 완료후 보안 설정 변경
   :: 시스템 설정 도구인 system-config-securitylevel 을 이용하여 보안수준 설정 변경

 0. 설치 완료후 기본 언어 변경
   :: 언어 설정 도구인 system-config-language를 이용
   :: etc/sysconfig/i18n 파일 편집

 0. 설치 완료후 시간과 날짜 변경
   :: 날짜 변경 도구인 system-config-date 를 이용
   :: # rdate -s time.bora.net - 시간서버를 이용한 시간 변경

 0. 설치 완료후 루트의 암호 변경
  :: 루트 암호 도구 system-config-rootpassword 이용
  :: passwd 명령어 이용

 0. 설치 완료후 패키지 설치
  :: CentOS 는 RPM 기반으로 이루어져 있기 때문에 rpm 명령어 이용
  :: 응용 프로그램 추가/삭제 도구인 system-config-packages 이용
반응형
Posted by [PineTree]
OS/LINUX2010. 7. 9. 17:00
반응형



1. yum 다운 받는다

wget http://linux.duke.edu/projects/yum/download/2.0/yum-2.0.7.tar.gz


2. 압축을 푼다.

gzip -d 파일이름

tar -xvf 파일이름


3. 압축된 폴더로 이동하여 아래와 같이 입력한다.

./configure
make
make install


4. 설치를 확인한다.

yum

여러 옵션설 명이 뜬다면 설치된것이다.
반응형

'OS > LINUX' 카테고리의 다른 글

linux root 패스워드 복구 방법  (0) 2011.05.21
[Linux] 설치 후 설정 변경  (0) 2010.08.11
ssh 포트 변경  (0) 2010.02.04
linux kernel panic에러시 복구  (0) 2010.02.02
NFS-네트웍을 이용한 파일시스템 공유  (0) 2009.12.21
Posted by [PineTree]
OS/LINUX2010. 2. 4. 17:01
반응형

기존 ssh 포트 :  22번

변경 ssh 포트 :  2200번


linux의 경우 여러 아이피에서 포트 스캔등이 이루어 지고 있고 여러 계정 또는 비밀번호를 크랙하기 위해 brute scan

접속시도를 하는경우가 많다.

요런거를 Brute_Scan attack 이라고 한다.


이러한 공격에 대하여 임시방편으로 ssh port 를 변경하는 방법이다.


참고로 ssh 포트 변경후 변경된 포트로 접속이 안될 경우는 직접 콘솔에서 작업하라.


1. /etc/ssh/sshd_config 에서 수정(2200번 포트로 변경을 한다는 가정을 할때)

Port 22  ==> Port 2200  
#Protocol 2,1
#ListenAddress 0.0.0.0
#ListenAddress ::


2. sshd_config 를 수정 후 sshd 데몬을  restart 한다.

예) /etc/rc.d/init.d/sshd restart


3. 그리고 접속해보라 !


이외에 sshd_config 에서 몇가지 수정시 보안상 좋은 내용이 있다.


# 서버에 바로 root 접속을 막는다.
PermitRootLogin no

# 로그인이 성공적으로 이루어지지 않았을 때 이 시간 후에 서버가 연결을
끊는 시간이다. 값이 0이면 제한 시간이 없다.
LoginGraceTime 600

# 인증실패시 재시도 횟수 설정
MaxAuthTries 3


주의사항

요런경우도 있다.

가령, rsync를 이용하거나 어떤걸 이용해서 백업을 받는 경우가 있는데, 요런 경우에는 변경한 포트를 적용시키기 위해서는


# rsync -e "ssh -p2200" kjb4310_070417.tar.gz x.x.x.x:/home2/kjb4310/


해보라 알것이다 ㅡㅡ

반응형
Posted by [PineTree]
OS/LINUX2010. 2. 2. 16:37
반응형
테스트 서버중 하나인 Linux9 장비가 FTP가 먹통이 되어 시스템을 아예 reboot 함.

재 부팅중 아래와 같은 오류 발생

Error Messages ::

                 VFS: Mount root (ext2 filesystem)

                 Red Hat nash version 3.4.42 starting

                 Mounting /proc filesystem

                 Creating bloack devices

                 failed to read /proc/partitions: 0

                 Creating root device

                 mkrootdev: label /not found

                 Mounting root filesystem

                 Mount: error 2 Mounting ext3

                 pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed: 2

                 umount /initrd/proc failed: 2

                 Freeing unused kernel memory: 132k freed

                 kernel panic : No init found. Try passing init= option to kernel.


Problem Cause ::

                 root에 존재하는 initrd라는 디렉토리가 지워졌을때 발생됨

                 (init 프로세서가 존재하지 않거나 잘못된 경우)

                 Kernel이 손상된 경우도 포함된다.

 

Solution ::

      만약, Single모드로 부팅이 가능하다면

      ex) fsck.ext3 -y /dev/hda1 로 ext3를 체크해주면 해결이 가능하다.
          (오류가 난 디스크 파티션이 hda1 일 경우)

      만약, Single모드가 부팅이 불가능하다면

      1) Linux 설치 CD를 넣고

      2) linux rescue 로 입력하여 부팅을 한다음

      3) # 에 커서가 뜨면 chroot /mnt/sysimage 해서 root 모드로 들어가서

      4) root에서 mkdir /initrd 를 해준다.

       * initrd라는 디레토리는 RAM mount , pivot_root system call의
         명령을 수행하는 디렉토리로 수행후에 안에 파일은 지워짐
         그렇기 때문에 파일이 존재하지 않는다고 지우면 부팅이 불가해진다.

      5) init 6 또는 reboot라는 명령어로 재부팅을 해주면 복구 완료.

위 상태로도 안되면

      또,  리눅스CD linux rescue nomount 로 복구하기

      현재 상태에서는 장치파일명이 생성되어있지 않으며 마운트도 되어있지 않기 때문에 현재 시스템의 어떠한 수정작업도 할
      수 없는 상황이다.  먼저 필요할 것 같은 장치명들을 임의대로 생성한다.

# mknod /dev/sda -> /dev/sda  장치명 생성 (sda 는 SCSI 하드인 경우, hda 는 일반 하드디스크를 의미)
# mknod /dev/sda1 -> /dev/sda1 장치명 생성
# mknod /dev/sda2 -> /dev/sda2 장치명 생성
생성한 장치와 마운트할 마운트포인트(디렉토리)를 생성한다.
# mkdir /temp
# mkdir /temp1
# mkdir /temp2
위에서 생성한 각 장치명과 각 디렉토리들을 마운트한다.
# mount /dev/sda1 /temp1
# mount /dev/sda2 /temp2

 #fdisk -l    //          이 명령을 통해 올라와있는 파일시스템을 모두 체크한다.

#e2fsck -j ext3 /dev/sda1        //    ext3 시스템을 점검할때에는 -j 플래그를 사용한다.

※ e2fsck를 사용할때 주의점 :: 파일시스템이 마운트되어 있는 상태에서 사용하면 심각한 오류를 가져올 수 있다.

 

위의 상황이라면 간단하지만..  아예 부팅이 되지않는 상황이라면..리눅스 CD linux rescue 모드를 이용해야 한다.

boot : linux rescue

 

Rescue 설정상황

 - Continue         현재 시스템의 마운트정보를 찾아서 /mnt/sysimage 디렉토리로 마운트한다.

 - Read-Only       파일시스템을 마운트 할때 읽기전용모드로 마운트 한다.

 - Skip                바로 리눅스 쉘을 획득한다.

 

위의 3가지를 통해 복구모드로 들어 가려 할때 에러가 발생하면  다음으로 조치를 취할 수 있는 방법은 linux rescue nomount 모드가 있다.

boot : linux rescue nomount



/mnt/sysimage 를 /로 만들어서 사용
chroot /mnt/sysimage

cd-rom으로 복구
linux rescue

linux rescue nomount

직접 파일시스템을 마운트한다.

mknod /dev/sda
mknod /dev/sda2

mkdir /temp
mkdir /temp2

mount /dev/sda2 /temp2
chroot /temp2

시스템 업그레이드 방법으로 복구하기

linux text 모드에서 이미설치되어 있는 파티션을 선택해서 진행(reinstall아님)
반응형
Posted by [PineTree]
OS/LINUX2009. 12. 21. 14:11
반응형



 

    NFS(Network File System)는 파일시스템을 컴퓨터끼리 공유할 수 있게 해주는 서비스이다. 즉, 여러 대의 컴퓨터(NFS 클라이언트)가 큰 용량의 하드디스크를 가진 컴퓨터(NFS 서버)로부터 서버의 하드웨어나 운영체제에 관계없이 파일시스템을 가져다 마치 자신의 파일 시스템인 것처럼 사용할 수 있게 해주는 것이 NFS의 기본 개념이다. 네트웨어나 NT, 윈도우 95에서의 파일 공유를 접해본 일이 있는 사람은 쉽게 이해할 것이다.

    이러한 NFS의 개념은 적은 용량의 디스크를 가진, 또는 아예 그것조차도 없는 클라이언트를 나타나게 하였다. 그리고 이들이 NFS 서버의 대용량 파일 시스템을 공유할 수 있게 됨으로써 아무런 불편 없이 저렴하게 시스템을 사용할 수 있도록 하는 파급 효과를 낳기도 하였다.

    NFS는 1985년 썬(Sun Microsystems)사가 도입했다. 원래는 하드디스크가 없는 클라이언트를 구현하기 위해 도입했었지만, 지금은 리눅스를 포함한 대부분의 유닉스가 어떤 형태로든지 NFS를 구현하고 있을 정도로 유닉스에서의 대표적인 파일 공유 방법이 되었다. 그리고, 이런 NFS의 유명함 때문에 유닉스만이 아니라 도스를 비롯한 거의 모든 OS에서도 NFS를 쓸 수 있다.

    이 글은 물론 리눅스를 중심으로 설명하지만, 다른 유닉스의 시스템의 NFS도 간략하게나마
    다 루고자 한다. 현실적으로 NFS를 필요로 하는 네트워크가 리눅스만으로 이루어져 있는 경우는 극히 드물기 때문이다. 덧붙여 말하자면, 리눅스를 공부할 때 좋은 자세는 기본 뼈대나 개념을 충분히 파악하고 난 후, 다른 유닉스 시스템에서는 이를 어떻게 구현하고 있는 가도 살펴보는 것이다. 유닉스 시스템이 다양하긴 하지만 기본 철학과 개념은 동일하고 다만 몇몇 세부 사항에서만 약간 틀린 정도이기 때문에, 리눅스만을 공부할 때보다 약간의 신경만 더 쓰면 유닉스 시스템이 가진 다양한 맛과 향(?)을 음미할 정도의 유닉스 전문가가 될 수 있을 것이다.

    1장에서는 NFS 서버에 대해서 다룬다. 서버에서 NFS를 설치하는 방법, 그리고 NFS 서버가
    실행하는 중요한 데몬을 살펴보고, 서버의 환경 설정 파일인 exports 파일의 자세한 설정방법을 다룬다.

    이어서, 2장에서는 NFS 클라이언트에 대해서 다룬다. NFS클라이언트를 설치하는 방법, 그리고 클라이언트의 환경 설정 방법인 fstab 파일의 자세한 설정 방법을 다룬다. 3장에서는 fstab 파일의 단점을 보완하기 위해 나온 자동 마운터 중에서 가장 유명한 amd의 사용법을 다루고, 마지막 4장에서는 유닉스 관리자 입장에서 NFS를 다룰 때 알아두어야 할 UID와 GID의 통일, 표준적인 디렉토리 명명규칙의 필요성, 외부 네트워크와 NFS를 할 때의 문제점, 전용 NFS 파일서버, 보안, 모니터링과 튜닝 등의 문제를 다룬다.

     

1. NFS 서버

    NFS는 파일시스템을 제공해주는 서버와 서버의 파일시스템을 이용하는 클라이언트의 협동작업으로 이루어진다. 여기서는 먼저 NFS 서버에 대해서 알아본다.

 

1.1 NFS 서버 프로그램 설치

    모든 유닉스 시스템은 처음 설치할 때 NFS에 필요한 파일을 설치한다. 따라서 별도의 NFS 설치 과정은 필요 없다. 리눅스도 초기 설치 과정에서 NFS가 기본으로 선택되어 있으므로 대부분의 시스템에 설치되어있을 것이다. 그러나, NFS가 설치되지 않았더라도 크게 걱정할 필요는 없다. 쉽게 새로 설치할 수 있으니 말이다.
    국내에서 많이 쓰이는 레드헷 리눅스의 경우 nfs-server-???-?.rpm과 nfs-server-clients-???-?.rpm이 설치되어 있는지 살펴보면 NFS의 설치 여부를 알 수 있다.
     

    rpm -aqi |grep nfs


    라고 입력해보자.
     

    Name : nfs-server

    Name : nfs-server-clients


     라는 메시지가 뜨는 경우엔 NFS가 이미 설치되어 있는 것이다.

    rpm -aqi |grep nfs 명령에 "no match"메시지가 뜨는 경우엔 새로 설치해주면 된다. 이미 잘 알고 있겠지만 다시 한번 반복한다면,
     

    rpm -ivh nfs-server-???-?.rpm
    rpm -ivh nfs-server-???-?.rpm

 

    라고 입력한 후에 /etc/rc.d/init.d/nfs start 명령을 내려주면 그것으로 설치 과정은 끝이다.

     

1.2 NFS 서버 데몬  

    당연한 얘기지만 NFS 서버를 만들기 위해서는 관련되는 데몬 프로그램이 제대로 설정되어 실행되어야 한다. 이들 데몬 프로그램은 시스템의 rc 스크립트에 의해서 부팅할 때 자동으로 실행된다.
    BSD 계열의 rc 스크립트를 쓰는 시스템에서는 대개 /etc/rc.local 파일에서 mountd나 nfsd와 같은 프로그램이 실행되고 있을 것이다. 혹시 이 부분이 주석 처리되어 있으면 주석을 제거해야 한다.

    AT&T 계열의 rc 스크립트를 쓰는 시스템에서는 /etc, 혹은 /etc/rc.d 디렉토리의 하위디렉토리인 rc2.d나 rc3.d 디렉토리 밑에 S??nfs과 같은 스크립트에 의해서 실행된다. 혹시 이런 스크립트가 없다면, S??nfs라는 이름의 심볼릭 링크를 /etc/init.d/ 혹은 /etc/rc.d/init.d 디렉토리 안에 있는 NFS 실행 스크립트에 시키면 된다.
    레드헷 리눅스의 경우 /etc/rc.d/rc3.d/S??nfs에 의해 부팅할 때 자동으로 실행된다.
    이들 스크립트에 의해서 실행되는 데몬은 다음과 같다.

 

    1.2.1. portmap: RPC 서비스를 TCP/UDP 포트에 연결

      NFS는 썬의 XDR(아키텍쳐와 무관하게 데이터를 표현하는 방법)과 RPC(remote procedure call) 인터페이스를 기반으로 설계되었다. RPC를 이용하는 프로그램이 시작되면 그 프로그램은 자신이 제공하는 서비스와 자신이 사용하는 포트를 portmap에 등록한다. 그리고, 클라이언트는 portmap에 문의해 원하는 서버에 접근할 수 있는 방법을 알아내게 된다. 유닉스 시스템에 따라서는 portmap 대신에 rpc.portmap, 또는 rpcbind라고도 부른다.

 

    1.2.2. rpc.mountd: 마운트 요청이 들어오면 응답

      NFS 클라이언트가 서버의 파일시스템을 이용하기 위해서는 먼저 서버가 자신의 파일시스템을 NFS를 이용해 다른 호스트가 공유할 수 있도록 설정해야 한다. 이와 같은 작업을 BSD 계열 유닉스에서는 export라는 용어를, AT&T 계열 유닉스에서는 share라는 용어를 쓴다. 리눅스는 export라는 용어를 쓴다.
      NFS 클라이언트가 공유된 NFS 서버의 파일시스템을 이용하기 위해서는 반드시 서버의 파일시스템을 마운트해야 한다. NFS 클라이언트가 마운트를 요청해오면, rpc.mountd 데몬이 /etc/exports 파일의 설정에 따라 마운트 요청을 처리한다.

      클라이언트가 서버 파일시스템을 마운트할 수 있는 권한을 획득한 이후에도 서버와 클라이언트간에 접속이 계속 유지되는 것은 아니라는 점은 알아둘 필요가 있다. 즉, http처럼 요청이 들어오는 경우에만 접속이 이루어졌다가 더 이상 필요가 없으면 접속이 해제되는 (stateless) 방식을 취하게 된다.
      유닉스 시스템에 따라서는 rpc.mountd 대신에 mountd라는 용어를 쓰기도 한다.

 

    1.2.3. rpc.nfsd: 파일을 클라이언트에 제공

      rpc.mountd가 클라이언트의 마운트 요청을 받아들이면, 클라이언트는 마운트된 파일시스템에 대해 다양한 작업을 할 수 있다. 클라이언트가 작업을 수행하면서 서버 쪽 파일시스템에 무언가를 요구하게 되면 rpc.mountd와 마찬가지로 자기 자신이 NFS 서버로서의 역할도 동시에 수행하고 있지 않다면 NFS 클라이언트가 rpc.nfsd를 실행시킬 필요는 없다.
      rpc.nfsd는 포크(fork)를 통해 만들어내는 자기 복사본의 수를 몇 개로 할 것인가를 지정하는 하나의 매개변수만 받아들인다. 리눅스를 제외한 대부분의 시스템에서 적절한 수의 rpc.nfsd를 설정하는 것은 매우 중요하다. 하지만, 안타깝게도 어떤 수가 적절한 숫자인지 알 수 있는 명확한 척도는 없고, 대부분의 경우 시행착오를 통해서 알아낼 수 밖에 없다. 이 숫자가 너무 많거나 적으면 NFS의 성능은 크게 영향을 받는다.

      적어도 4개의 rpc.nfsd는 실행시키는 게 일반적이다. NFS를 자주 이용하지 않는다면 4개 정도면 충분하다. 이론적으론 수백, 수천 개의 rpc.nfsd를 실행하는 것도 가능하다. 그러나, 너무 많은 rpc.nfsd를 실행하는 것도 각각의 프로세스가 CPU를 두고 서로 경쟁하기 때문에 시스템 성능을 저하시킨다.
      서버의 load average(uptime audfufd으로 알 수 있다)가 급격히 많아지는 시점까지 rpc.nfsd의 숫자를 늘려보면, 시스템이 감당할 수 있는 rpc.nfsd의 최대 값은 알 수 있다. 이 최대 값에서 몇 개를 줄이면 안전한 값이 되긴 하겠지만, 이 값이 최선의 값이라는 보장은 없다. 단지 최대 값을 기준으로 한 것이기 때문이다.

      또 하나의 방법은 UDP 오버플로우의 개수를 파악하는 방법이다. 부하가 많이 걸리는 NFS 서버의 경우, 모든 rpc.nfsd가 사용중일 때 또다른 요청이 들어오면 UDP 소켓이 오버플로우를 일으킬 수 있다. 오버플로우의 개수는 netstat -s 명령으로 알아볼 수 있는데, 이를 통해 UDP 소켓 오버플로우가 0으로 떨어지려면 대략 얼마나 많은 rpc.nfsd가 있어야 하는지 알아내는 것이다. 이렇게 알아낸 rpc.nfsd의 최적 값을 시스템의 rc 스크립트에 적용하면 된다.
      그러나, 리눅스의 경우 rpc.nfsd를 여러 개 띄우는 것이 불가능하진 않지만, 아직 완전하게 테스트가 끝난 사항이 아니므로 권장하고 싶진 않다.
      유닉스 시스템에 따라서는 rpc.nfsd 대신에 nfsd라고도 한다.

 

    1.2.4. rpc.lockd

      파일 잠금(lock)을 통해 여러 명이 동시에 한 파일을 수정하는 것을 막는다. 리눅스에서는 실행되지 않는다.

 

    1.2.5. rpc.statd

      파일 잠금의 해제와 복구를 담당한다. 리눅스에서는 실행되지 않는다.

      이들 데몬이 제대로 실행되었는지를 확인하고 싶다면, 우선 rpcinfo -p 명령을 통해서 rpc.mountd와 rpc.nfsd가 portmap에 제대로 등록되었는지를 확인해본다. 등록된 이름은 실제 데몬 이름과 약간 다를 수는 있다. 이를테면 rpc.mountd가 mountd로, rpc.nfsd가 nfs로 등록될 수 있다. Ps -aux(AT&T 계열에선 ps -ef) 명령을 통해서 해당 데몬이 실행되고 있는지 확인해보는 것도 유용하다. 때로는 해당 프로세스가 제대로 작동하지 않아도 portmap에 등록되어있을 수 있기 때문이다.

 

1.3 파일시스템 공유 설정

    대부분의 유닉스에서는 /etc/exports 파일에 어느 디렉토리(또는 파일 시스템)를 어떤 제약을 두어 공유할 것인가 하는 내용을 담는다. 아무에게나 자신의 파일 시스템을 마구 사용할 수 있게 하는 것은 마치 대문을 활짝 열어두고 사는 것과 같은 일이기 때문이다.

    exports 파일의 형식은 공유하는 디렉토리를 왼쪽에 적고 그 디렉토리와 관련된 옵션이나 속성을 오른쪽에 적어 준다. 백문이 불여일견 이므로 리눅스의 exports 파일을 예로 들어보도록 하자.
     

    /lily/users daisy(rw,no_root_squash) rose(ro) 
    /usr/share/man freesia(ro) clover(ro) daisy(ro)

 

    이 export 파일은 /lily/users 디렉토리를 daisy라는 호스트가 읽고 쓸 수 있고 루트의 권한으로 접근하는 것도 허가한 것이며, rose라는 호스트는 읽기 전용으로 마운트할 수 있게 설정한 것이다. 그리고 /usr/share/man 디렉토리에 대해서는 freesia, clover, disy가 읽기 전용으로 마운트할 수 있게끔 설정한 것이다. 중요한 옵션은 표1과 같다.  

표 1)exports 옵션(리눅스)
 

    옵션

    설명

    ro

    읽기만 가능하도록 마운트

    rw

    읽고 쓰기가 가능하도록 마운트

    no-root-squash

    루트의 자격으로 파일시스템에 접근할 수 있도록 마운트

    root-squash

    루트의 자격으로 파일시스템에 접근하면 anonymous uid/gid로 바꿔서 허가

    noaccess

    디렉토리를 접근하지 못하게 한다. 공유된 디렉토리의 특정 하위 디렉토리만을 접근하지 못하도록 제한하고 싶을 때 유용하다.

 

    리눅스의 /etc/exports 파일 형식은 다른 유닉스 시스템에 비해 특이한 편이다. 일반적인 유닉스 시스템의 exports 파일은 옵션사이엔 쉽표(,)를 쓰고, 호스트를 나열할 때는 콜론(:)을 써서 다음과 같이 나타낸다.
     

    /lily/users -access=rose,rw=daisy,root=daisy
    /usr/share/man -access
           =freesia:clover:daisy,ro=freesia:clover:daisy

 

    exports 파일의 옵션도 유닉스마다 약간 다른데, 자주 쓰이는 옵션을 정리하면 다음 표 2,3과 같다.
     

    옵션

    설명

    -access = 호스트 이름

    파일시스템을 마운트할 수 있는 호스트(":"여러 개 나열 가능)

    -ro

    읽기 전용으로 공유

    -rw = 호스트 이름

    읽고 쓸 수 있는 호스트
    (":"여러 개 나열 가능)

    -root = 호스트 이름

    루트의 자격으로 파일시스템에 접근할 수 있는 호스트 (":"여러 개 나열 가능)

    -anon = 숫자

    익명 사용자의 요청이 있을 때 부여하는 UID. 디폴트는 nobody


표 2) exports 옵션(IRIX, HP-UX, SunOs)

  

    옵션

    설명

    호스트 이름

    지정된 호스트가 파일시스템을
    마운트할 수 있다.

    -ro

    읽기 전용으로 공유

    -root = 숫자

    루트의 자격으로 파일시스템에 접근할 때
    부여하는 UID. 지정 하지 않으면 nobody


표 3) exports 옵션(BSDI, OSF/1)

    이처럼 유닉스마다 export 옵션이 약간씩 다르므로 자세한 exports 파일 형식은 man exports 명령을 이용해 확인하는 것이 좋다.
    NFS 는 물리적 파일시스템을 대상으로 하는 것이 아니라 논리적 파일시스템을 대상으로 한다. 바꿔 말하면, 물리적인 파일 시스템에 구애받지 않고 어떤 디렉토리도 공유할 수 있다. 하위 디렉토리에 다른 파티션이 존재하더라도, 이를 전혀 신경 쓰지 않아도 된다.

    exports 파일에 아무런 호스트도 지정하지 안고 단순히 공유할 디렉토리만 적어주게 되면 그 디렉토리는 "모든" 호스트가 마운트할 수 있게 된다. 이 경우 보안상의 문제를 불러일으킬 수 있으므로 주의해야한다. Solaris의 경우 /etc/exports 대신 /etc/dfs/dfstab 파일을 쓴다. 이 파일은 환경설정파일이라기보다는 share 명령을 실행하는 쉘스크립트다. Share 명령에 쓰이는 옵션은 SunOs의 export 옵션과 유사하다. 예를 들자면,
     

    share -F nfs -o rw=lily:rose,root=lily  /lily/users
    share -F nfs -o ro=lily:rose:daisy  /usr/share/man

 

    /etc/exports 파일을 바꿔도 당장 그 변경이 효력을 발생하진 않는다. exports 파일을 바꾼 이후에는 rpc.mountd가 설정파일을 다시 읽도록 해줘야 한다. /etc/exports 파일을 수정한 다음 이를 반영하는 절차는 유닉스 시스템에 따라 다르다. 리눅스는 exportfs 명령이 없기 때문에 kill 명령으로 rpc.mountd와 rpc.nfsd에 SIGHUP 시그널을 보내야 한다. 다음과 같은 스크립트를 /usr/sbin/exportfs라는 이름으로 저장하는 것도 한가지 방법이다.
     

    #!/bin/sh
    killall -HUP /usr/sbin/rpc.mountd
    killall -HUP /usr/sbin/rpc.nfsd
    echo re-exportted file system

 

    레드햇 리눅스의 경우 다음 명령을 실행시켜줘도 된다.
     

    /etc/rc.d/init.d/nfs stop
    /etc/rc.d/init.d/nfs start

 

    HP-UX, IRIX, SunOs 같은 경우는 /usr/etc/exportfs -a 명령을 실행시키면 된다. Exportfs 명령이 없는 OSF/1이나 BSDI는 kill 명령으로 mountd에 SIGHUP 시그널을 보내주어야 한다. Solaris의 경우는 특이한데, share 명령을 수행하면 mountd에게 변경된 내용을 알려주게 되므로, 수정한 /etc/dfs/dfstab 파일을 실행시켜주면 변경된 내용이 반영된게 된다.

 

2. NFS 클라이언트

 

2.2 커널 컴파일

    NFS 클라이언트를 설정하기 위해서는 먼저 커널이 NFS를 지원하도록 컴파일되어 있어야 한다. 리눅스 커널은 디폴트로 NFS를 지원하도록 컴파일되어 있으므로 신경쓰지 않아도 된다. 만약 새로 커널을 컴파일할 경우에는 make config 명령을 내린 다음에,
     


    *
    * Filesystems
    *

    NFS filesystem support (CONFIG_NFS_FS)
                                     [M/n/y/?]

 

    이와 같은 부분이 나왔을 때 M 또는 Y를 선택해주면 된다. M을 선택한 경우는 모듈로 컴파일하게 된다. 별로 그럴 일은 없겠지만, 만약 하드디스크가 없는 클라이언트를 구성하고 싶다면 반드시 Y를 선택해야 한다. 다른 유닉스 시스템의 커널도 디폴트로 NFS를 지원하도록 컴파일되어 있다.

 

2.2 NFS 클라이언트 프로그램 설치

    모든 유닉스 시스템은 설치 과정에서 NFS에 필요한 파일을 설치한다. 따라서 별도의 NFS 클라이언트 프로그램 설치는 필요 없다. 리눅스도 NFS 클라이언트로 동작하기 위해서 특별히 설치해줘야 하는 프로그램은 없다. 레드헷 리눅스의 경우, nfs-server-clients-???-?.rpm를 설치하면 한두가지 유틸리티가 설치되지만, 반드시 필요한 것은 아니다.

 

2.3 NFS 클라이언트 데몬

    NFS 클라이언트가 실행시키는 데몬은 nfsiod 하나정도밖에 없다. 엄격히 말해 필수적인 데몬은 아니지만, 반드시 이 데몬을 실행하길 바란다. 하지만, 리눅스의 경우는 커널 차원에서 nfsiod를 지원하므로 이 데몬에 신경 쓰지 않아도 된다.

 

    2.3.1 nfsiod: 클라이언트 쪽의 캐쉬를 담당

      NFS의 성능을 전반적으로 향상시키기 위해서 대부분의 시스템은 자동으로 nfsiod를 실행하게끔 하고 있다. nfsiod 데몬은 기본적인 캐쉬 기능(read-ahead, write-behind)을 제공한다.

      리눅스를 제외한 보통의 시스템에서는 rpc.nfsd처럼 nfsiod도 그 매개변수로 자기 복사본의 수를 몇 개로 할 것인가를 지정한다. Rpc.nfsd에 적용한 규칙을 그래도 nfsiod에 적용할 수 있다. 만약, NFS 서버와 클라이언트의 역할을 동시에 한다면 프로세스의 최적값을 rpc.nfsd와 nfsiod 사이에 적절하게 나누는 것이 좋다. 물론 적절한 값은 시스템에 따라, 그리고 어느 정도로 사용하느냐에 따라 다를 수 있다.

      리눅스, BSDI, OSF/1을 제외한 다른 유닉스에서는 nfsiod라는 이름 대신에 biod(block I/O 데몬)라는 이름을 쓰는 것이 일반적이다.

 

2.4 파일시스템 마운트 설정

    커널이 지원해주고 nfsiod 데몬이 실행된다면, 남은 일은 NFS 파일시스템을 마운트해서 쓰는 일 뿐이다. NFS 서버의 파일시스템을 마운트하기 위해서는 mount 명령의 장치(device) 이름을 적는 자리에 다음과 같은 방법으로 NFS서버의 파일시스템을 지정하면 된다.
     

    Lily:/usr/share/man

 

    이 의미는 lily라는 호스트의 /usr/share/man 디렉토리를 의미한다. 따라서, lily라는 호스트의 /usr/share/man 디렉토리를 /usr/share/man 디렉토리에 마운트하려면,
     

    mount -t nfs -o soft,intr lily:/usr/share/man
    /usr/share/man

 

    과 같은 명령을 주면 된다. 여기에서 soft,intr 등은 NFS 파일시스템을 마운트할 때 쓰이는 옵션이다.

    유닉스 시스템간에 공통된 옵션은 표 4와 같다.
     

    옵션

    설명

    rw

    읽고 쓰기가 가능하게 파일시스템을 마운트(서버에서 rw로 공유해야)

    ro

    읽기 전용으로 마운트

    bg

    만약 첫 번째 NFS 마운트 시도가 타임아웃에 걸리면 파일 시스템을 백그라운드로 마운트시킬 것을 알려주는 옵션. 이것은 NFS로 파일시스템을 공유하는 여러 호스트를 동시에 부팅할 때 편리한 옵션이다. 호스트 A와 B가 동시에 부팅 한다고 생각해보자. 호스트 A는 호스트 B의 파일시스템을 마운트하려 들지만, 이 때 호스트 B도 부팅 중이어서 호스트 B의 파일시스템이 아직 공유되지 않았을 수 있다. 이때 호스트 A는 마운트가 바로 되지 않으면 일단 mount 명령을 백그라운드로 수행하게 되는 것이다. 불행하게도 리눅스에서 아직까지는 이 옵션을 받아들이긴 하지만 그냥 무시해버린다.

    hard

    NFS 서버가 다운되었을 때 서버가 응답이 있을 때까지 끝없이 마운트 시도를 한다. 이때 클라이언트 쪽에서 이를 해제할 수도 없다. 이 같은 hard 마운트는 하드디스크 없는 컴퓨터가 부트 서버(boot server)의 파일 시스템중 루트 파티션이나 스왑 파티션을 마운트할 때 유용하다. 즉 hard 마운트는 핵심적인 파일시스템에 대해서 행하는 것이 좋다. 디폴트값은 hard다.

    soft

    NFS 서버가 다운되었을 때, hard 마운트와 달리 에러를 내고 마운트 시도를 중단한다. 이 옵션은 중요하지 않은 파일시스템에 대한 마운트 시도 때문에 시스템의 프로세스가 더 이상 수행되지 않는 최악의 상황을 피하는데 유용하다.

    retrans=숫자

    soft마운트의 경우, 마운트가 되지 않아 에러를 출력하기 전에 몇 번 재 시도할지를 지정한다. 리눅스의 rudd 기본 값은 3이다.

    timeo=숫자

    타임아웃이 생기고 나서 첫 번째 재전송요구를 보낼 때 사용되는 시간이다. 네트웍 속도가 느리거나 서버 자체가 느리다든지 여러 개의 라우터와 게이트웨이를 거칠 때는 타임 아웃 시간을 늘려주는 것이 좋다.

    intr

    사용자가 마운트 시도를 중단시킬 수 있도록 한다.

    raize=숫자

    NFS 서버로부터 읽어 들이는 바이트 수를 지정한다. 기본 값은 커널에 따라 다른데 리눅스의 겨우 현재로서는 1024바이트이다.

    wsize=숫자

    NFS 서버에 쓰기를 할 때 사용하는 바이트 수를 정한다. 기본값은 커널에 따라 다른데 리눅스의 경우 현재로서는 1024바이트이다.

    nosuid

    마운트된 파일시스템에서 setuid 비트가 붙은 파일을 실행시킬 때 setuid의 효과가 일어나지 못하도록 OS 차원에서 막아 주는 역할을 한다. 따라서 security 문제를 좀더 신경 쓰고 싶은 경우 nosuid로 마운트 시켜야 한다.


표 4) NFS와 관련된 마운트 옵션

    NFS 파티션은 umount 명령을 이용해서 없앨 수 있다.

 

    2.4.1 /etc/fstab을 이용한 설정

      mount 명령을 통해 NFS 파일시스템을 마운트 시켰을 경우, 시스템이 재부팅 되면 다시 원래 상태대로 돌아가므로 임시로 마운트 할 때밖에는 쓰이지 않는다. 그러나 보통의 경우 시스템의 영구적인 설정으로 마운트를 하려면 /etc/fstab 파일에 이를 정의하거나 아니면 자동으로 마운트를 관리해주는 자동마운터를 쓰는 게 일반적이다.
      모든 시스템에서 /etc/fstab 파일을 쓰는 것은 아니다. Solaris의 경우 /etc/fstab 파일이 아니라 /etc/vfstab 파일을 사용한다. 마찬가지로 Sco Unix에서는 /etc/default/filesys 파일에, AIX는 /etc/filesystems 파일을 사용한다. 이 파일들은 /etc/fstab 파일에 비해 형식이 약간씩 틀리지만, NFS에 대한 옵션은 동일하다.

      다음 /etc/fstab 파일은 lily 호스트의 /lily/users 디렉토리와 daisy 호스트의 /usr/share/man 디렉토리를 마운트하는 예를 보여주는 것이다.
       

      lily:/lily/users /lily/users nfs rw,bg,intr,hard 0 0
      daisy:/usr/share/man /usr/share/man nfs ro,bg,intr,soft 0 0

 

      위의 예에서 /etc/fstab 파일의 왼쪽 4번째 항목은 NFS 마운트를 위한 옵션을 지정하는 곳이다. 여기에 쓰이는 옵션은 mount 명령에 쓰였던 옵션(위의 표 ?)과 같다.

      hard 옵션으로 파일시스템을 마운트한 컴퓨터는 서버가 다운되었을 때 시스템의 프로세스를 더 이상 진행하지 못하고 정지해버린다. 즉, 서버가 다운되었을 때, 클라이언트 마저 멈춰버리는 것이다. 따라서, 일반적으로 soft 옵션과 intr 옵션을 쓰는 것이 NFS와 관련한 여러 골치 아픈 문제를 줄이는 방법이다. 그러나 이 옵션은 약간의 바람직하지 못한 측면도 있다. 이를테면 20시간이 걸리는 시뮬레이션을 돌리고 있는데 사소한 네트워크 장애 때문에 18시간이나 돌린 시뮬레이션이 종료되어버리는 일도 발생할 수 있다.

      /etc/fstab 파일이 바뀐 것을 즉각 반영해주기 위해서는 mount -a -t nfs 명령을 실행해주면 된다. 그리고, etc/fstab에 항목을 추가할 때는 마운트가 될 디렉토리(mount point)를 미리 만들어줘야 한다.

 

3. 자동마운터

    대규모 네트워크에서는 많은 파일시스템을 마운트해야 하므로 /etc/fstab 파일의 내용이 상당히 복잡해진다. 이로 인해 한꺼번에 많은 파일시스템을 /etc/fstab 파일을 통해 마운트하는 것은 골치 아픈 문제를 불러일으킨다.

    첫째, /etc/fstab 파일을 유지 보수하는데 상당한 시간과 노력이 들어간다. 수십 개의 NFS 클라이언트가 있고, 그 각각의 /etc/fstab 파일에 수십 개의 NFS 서버를 나열한다고 생각해보자. 각각의 컴퓨터마다 /etc/fstab 내용이 조금씩 달라야 하기 때문에 하나하나의 /etc/fstab 파일마다 주의를 기울여야 한다.

    둘째, 클라이언트가 수십 개 혹은 그 이상의 NFS 파티션을 마운트했을 때, 이 중 하나의 서버만 다운되어도 클라이언트의 프로세스가 완전히 멈춰버릴 수 있다.

    셋째, 중요한 서버가 다운되면, 설령 클라이언트까지 다운되지 않더라도, 사용자들이 중요한 파일시스템, 이를테면 /usr/share/man 등을 사용할 수 없게 된다. 이 경우 백업 서버로부터 임시로 파일시스템의 복사 본을 마운트할 수 있어야 하는데, /etc/fstab 파일을 가지고는 이런 경우 대처할 방안이 없다.

    자동마운터는 파일시스템이 필요할 때 마운트하고 필요없을 때 마운트를 해제한다. 사용자는 /etc/fstab 파일을 이용한 방법과 아무런 차이를 느끼지 못하지만, 이 방법을 통해 실제 마운트된 파일 시스템의 수를 최소화되고 따라서 문제 발생 가능성 자체를 줄어든다. 대부분의 자동마운터는 중요한 파일서버가 다운되었을 때에도 자동으로 백업서버를 마운트해 계속 작업을 수행할 수 있도록 하는게 가능하다.
    자동마운터는 가상 파일시스템을 만들고, 네트워크상의 실제 파일시스템을 거기에 대응시킨다. 사용자가 가상 파일시스템을 이용하려 하면 자동마운터는 그 시도를 인식해서 실제 파일시스템을 마운트한다. 그리고 마운트한 파일시스템을 가상 디렉토리에 심볼릭 링크해 마치 가상 파일시스템을 실제 파일시스템인 것처럼 보이게 하는 환상을 만들어낸다.

    자동마운터에 대한 아이디어는 원래 썬에서 나왔다. 썬의 자동마운터인 automount는 대부분의 썬 호환 NFS 시스템에 탑재되어왔다. 그러나 불행하게도 automount는 버그와 디자인 오류 등으로 인해 amd에 비해 기술적으로 많이 떨어진다.

    런던 임페리얼 칼리지의 Jan-Simon Pendry에 의해 만들어진 amd는 썬의 아이디어를 확장한 박사학위 논문의 결과이다. amd는 automount의 심각한 결점을 많이 고쳤고 공개이므로 많은 유닉스 버전에 포팅 되었다. 따라서 가능하다면 amd를 쓰는 것을 권장한다.

 

3.1. amd

    amd는 automount에 비해 다음과 같은 이점을 가진다.

    -> amd를 사용하는 클라이언트는 NFS 서버가 다운되는 경우에도 같이 다운되지 않는다.

    -> amd는 일정한 간격으로 NFS 서버가 살아있는지를 확인하는 메시지를 보내고,
         접속 가능한 서버 목록을 보관한다. amd는 이 정보에 기초해 파일시스템을 마운트하거나
         혹은 마운트를 해제한다. 만약 서버가 다운된다 해도, 클라이언트마저 다운되지 않도록
         이 서버에 대한 마운트 시도를 중지하고 에러 메시지를 사용자에게 보여준다.

    -> amd는 소스코드가 공개되어 있어 20개 이상의 유닉스버전에 포팅 되어 있다.
         그리고, 리눅스는 무론이고 BSDI와 OSF/1에는 OS 설치할 때 기본으로 포함된다.

    -> amd는 텍스트 파일은 물론이고 NIS, Hesiod, ndbm같은 여러 가지 유형의 데이터베이스
         파일, 심지어 홈디렉토리를 마운트할 경우에는 /etc/passwd 파일도 설정 파일로 선택할
         수 있다.

    -> amd는 amd에 의한 마운트 상황을 알려주고 여러 가지 유용한 명령 (예를 들면 강제
         마운트 해제)을 실행할 수 있는 도구인 amq 프로그램을 제공한다.

    -> amd 설정파일의 구조는 automount 설정파일의 구조보다 더 일반적이다.
         그러므로, 똑 같은 설정파일 파일이라도 다른 호스트에 쓰이면 그 호스트에 맞게 동작
         하도록 설정할 수 있다. 따라서 수백 개의 NFS 클라이언트가 있더라도 모든 호스트에
         동일한 amd 설정파일을 쓸 수 있다.

    -> amd는 개념적으로 일관성 있는 파일시스템 개념을 사용하므로 automount보다
         하위 디렉토리등을 간단하게 다룰 수 있다.

 

3.2. amd의 설치

    amd가 설치되어있지 않은 유닉스 시스템은 인터넷에서 소스코드를 받아와서 컴파일해 설치할 수 있다. Amd를 받을 수 있는 ftp 서버는 ftp://ftp.cs.umn.edu/pub/AMD/나 ftp://ftp.eunet.fr/.01/network/amd/ 등 여러 군데가 있다.
    영문 레드햇 배포판 사용자는 amd-???-?.rpm 파일을 설치해주면 된다. 국내에서 만들어진 알짜 레드햇 배포판에는 amd가 어쩐 일인지 빠져있으나 당황할 필요는 없다. 패치맨 CD의 excluded 디렉토리에 rpm 파일이 보관되어 있으므로 이것을 이용해 설치하면 된다. 설치방법은 rpm -ivh amd-???-?.rpm 명령을 실행시켜주면 된다.

 

3.3 amd의 실행 및 종료

    amd의 명령행 옵션은 다양하지만, 주로 다음과 같은 옵션을 써서 실행시킨다.
     

    amd -a /.automount -l syslog / net/ etc/amd.conf

 

    여기서 -a는 실제 마운트되는 디렉토리를 지정하는 옵션이고 디폴트값은 /a이다. 그리고 -l 다음에는 로그 파일 이름이나 syslog를 써주는데, 에러 메시지를 기록하기 위한 옵션이다. 그 다음 아무런 옵션없이 적어주는 디렉토리는 가상으로 마운트되는 디렉토리를 뜻하고, 마지막에 적어주는 파일 이름은 amd의 설정 파일 이름이 된다. 따라서, 위 명령은 실제 마운트되는 디렉토리가 /.automount이고, syslog에 의해서 로그를 기록하며, 가상으로 마운트되는 디렉토리는 /net, 그리고 amd 설정파일은 /etc/amd.conf로 한다는 뜻이다.
    amd를 강제로 종료하면 amd의 가상 파일시스템을 안전하게 제거할 수 없다. 따라서 amd를 종료하기 위해서는 amd에 kill 명령으로 SIGTERM 시그널을 주는 방식을 택해야 한다.

    부팅될 때마다 자동으로 수행되게 하기 위해서는 BSD계열 유닉스의 경우 /etc/rc.local 파일에 위의 내용을 추가 하면 된다. AT&T 계열 유닉스에서는 위의 내용으로 /etc/init.d/amd 또는 /etc/rc.d/init.d/amd라는 스크립트를 만들고, 이 스크립트에 /etc, 혹은 /etc/rc.d 디렉토리의 하위디렉토리인 rc2.d나 rc3.d 디렉토리 밑에 S??amd라는 심볼릭 링크를 만들면 된다.
    레드햇 리눅스의 경우 amd를 설치하면 자동으로 실행 스크립트까지 만들어준다. amd를 실행시키기 위해서는 /etc/rc.d/init.d/amd start 명령을 실행시키기 위해서는 /etc/rc.d/init.d/amd start 명령을 실행시키거나 시스템을 재부팅 시키면 된다. 그리고 amd를 종료하기 위해서는 /etc/rc.d/init.d/amd stop 명령을 실행시키면 된다.

    사용자가 amd 설정파일에 정의된 가상 마운트 디렉토리 밑의 파일시스템을 이용하려 하면, amd는 파일시스템을 마운트하고, 사용 상황을 계속적으로 모니터 한다. 마운트한 파일시스템을 일정한 시간이 지나도록 아무도 사용하지 않으면 amd는 마운트를 해제하고 다시 사용될 때를 기다린다.
    마운트 상태를 보기 위해서는 amq 명령을 이용하면 된다.

 

3.4. amd의 설정

    amd 설정파일의 구조는 매우 유연하여 하나의 설정을 가지고 여러 컴퓨터에 사용될 수 있다. amd 설정파일에 나열된 각 파일 시스템은 연관된 마운트 형식을 가지고 있어야 한다. 가장 흔한 마운트 형식이 표 5에 나열되어 있다.
     

    옵션

    설명

    nfs

    NFS서버의 공유 디렉토리를 일반적인 방식으로 마운트

    ufs

    로컬 파일시스템을 일반적인 방식으로 마운트

    host

    NFS 서버의 공유 디렉토리를 전체 경로 명까지 포함해 마운트

    nfsx

    /usr/man이나 /usr/local/man과 같은 설정파일의 한 항목에 열거된 NFS 서버에 있는 여러 공유디렉토리를 동시에 마운트

    program

    특수한 파일시스템의 경우 마운트 또는 마운트를 해제하기 위한 용도의 프로그램이 따로 있다. 이런 파일시스템을 다룰 때 사용.

    link

    amd를 통해 어떤 디렉토리든지 접근할 수 있도록 실제 마운트 디렉토리를 가리키는 심볼릭 링크 생성  

    auto

    이미 존재하는 마운트 디렉토리 아래에 새로운 자동마운트 디렉토리를 생성. 주로 중요한 서버가 다운되었을 때 백업 서버를 마운트하는 용도로 사용된다.

    direct

    가상 디렉토리 밑이 아니라 다른 디렉토리로 마운트

    union

    여러 개의 디렉토리를 합쳐서 하나의 디렉토리로 마운트 (예를 들어 /tmp와 /var/tmp를 합치기)


표 5) 흔히 사용되는 amd 마운트 형식

    특정한 조건, 이를테면 특정한 호스트나 하드웨어 형태에서만 실행되도록 설정파일을 구성할 수도 있다. 이런 조건은 변수를 사용해서 '{변수명}' 형식으로 표시한다. 이용 가능한 변수는 표 6에 나열되어 있다.
     

    변수

    설명

    arch

    호스트의 하드웨어 구조(architecture)

    autodir

    파일 시스템이 마운트되는 디폴트 디렉토리

    byte

    시스템의 byte ordering("little" 아니면 "big")

    cluster

    호스트의 집합체 이름, 디폴트는 domain

    domain

    NIS 도메인 이름

    host

    호스트 이름

    hostd

    호스트 이름 + 도메인 이름

    karch

    커널 구조(디폴트값은 arch 변수의 값과 같다)

    key

    해석된 볼륨 이름

    map

    사용된 마운트 설정파일의 이름

    os

    OS 종류

    wire

    랜카드가 연결되어 있는 네트워크 이름


표 6) amd 설정파일에서 사용 가능한 변수

    다음은 amd 설정파일의 전형적인 예이다.

    '이름=값' 같은 형식은 마운트의 다양한 속성을 정의하는데 쓰인다. 예를 들어 첫 번째 행은 디폴트 마운트 옵션을
     

    /default opts:=rw,soft,timeo=10,retrans=5
    usr/man host==lily;type:=ufs;dev:=/dev/sdlf
                 host!=lily;rhost:=lily;rfs:=/${key};
                 type:=nfs;fs:=${autodir}/${key}
    cs/tools host==daisy;type:=ufs;dev:=/dev/sd3c
                 host!=daisy;rhost:=lily;rfs:=/${key};
                 type:=nfs;fs:=${autodir}/${key}

 

    "rw,soft,timeo=10,retrans=5"로 지정한 것이다. '이름=값' '이름=값' 같은 형식은 조건문을 나타낸다. 조건문의 오른쪽에 적힌 내용은 조건문이 참일 경우에만 쓰인다. ${autodir}이나 ${key} 자리에는 해당 변수값이 들어가게 된다.

    이 amd 설정파일은 /usr/man, /cs/tools 두 가지 파일 시스템들에 대해 정의한 것이다. /default 항목은 명시적으로 옵션을 지정하지 않았을 경우 모든 항목에 적용되는 디폴트값을 지정한다. Mad 설정파일에서 쓰이는 옵션은 다음 표 7에 나와 있다.
     

    옵션

    설명

    rhost

    특정 볼륨이 존재하는 NFS 서버

    rfs
    type

    NFS 파일시스템 이름
    마운트 형태

    fs

    마운트 포인트


표 7) amd 설정파일 옵션

3.5. 백업서버 지정

    automount처럼 amd도 특정 파일시스템에 대해 복수의 서버를 지정하는 것이 가능하다. 그러나 amd는 대부분의 경우에 주서버가 사용중에 다운되더라도 파일시스템의 마운트를 해제하고 곧바로 백업 서버를 마운트할 수 있는 부가적인 능력이 있다.

    다음 예제는 /usr/man 디렉토리를 lily와 daisy 두 개의 서버에서 마운트하도록 설정한 것이다.
     

    /default opts:=rw,soft,timeo=10,retrans=5
    usr/man host==lily;type:=ufs;dev:=/dev/sdlf ||
                 host==daisy;type:=ufs;dev:=/dev/sd3c ||
                 rhost:=lily rhost:=daisy;rfs:=/${key};
                 type:=nfs;fs:=${autodir}/${key}

 

3.6. 간단한 사용 예

    아주 복잡한 마운트도 amd 설정파일을 정의하기에 따라 간단하게 할 수 있다. 한번 다양하게 마운트를 시도해보기 바란다.
    그러나, amd의 이런 설정방식이 어렵게 트껴진다면, 다음과 같은 설정 파일을 /etc/amd.conf라는 이름으로 저장하고, 가상 마운트 디렉토리를 /net으로 해서 mad를 실행해보자.

     ls /net 명령을 내리면 /net 디렉토리에는 아무런 파일도
     

    /defaultstype:=host;fs:
                      =${autodir}/${rhost}/root;rhost:=${key}
    *           opts=rw,nosuid,grpi

 

반응형

'OS > LINUX' 카테고리의 다른 글

ssh 포트 변경  (0) 2010.02.04
linux kernel panic에러시 복구  (0) 2010.02.02
리눅스 rm삭제햇을 때 복구  (0) 2009.11.06
RedHat Linux Network 설정하기  (0) 2009.10.29
LINUX SWAP파일 추가하기  (0) 2009.09.07
Posted by [PineTree]
OS/LINUX2009. 11. 6. 14:13
반응형
얼마전에 저는 정말 절망 속에서 있었습니다.
지난 3개월간 작업한 모든 데이타를 rm -rf 로 날려버렸고.
백업도 2달 전에 해놓은거라. .;; 진짜 암담한 상황이었습니다.

몇몇 지인분들께 여쭤봐도 "포기해~ 그게 정신건강에 좋아" 라는 얘기만 들었습니다.

그러다가 보게 된. http://kldp.org/node/103288

하던중 큰 시행착오는 없었고 저 문서대로만 하면되는데.
umount 하는데 ;; 문제가 많이 발생했습니다. 아래 차근 차근 설명을 쓰겠습니다.

제가 사용하는 centOS 에서만 그런지 모르겠지만.
옵션이 "-" 문자가 아니라 "--" 문자로 해야 작동을 했습니다.
--help 쳐보면 옵션 나오죠^^
저처럼 아무것도 모르는 초짜를 위해서 말씀드리자면.

저 링크에 있는 파일 받아서 설치하기 위해선
1-      ./configure (물론 압축풀린 곳에서)
2-      make
3-      make install

요렇고롬 해주면 됩니다.
패키지로도 되어있다고 하니깐. 우분투 패키지 관리자에서 잘 찾아보시길.

ext3grep 입니다.


설치후에 umount 해주니

device 가 아직 작동중이랍니다.

그래서 fuser -km /dev/sda6 (제 파티션 장치가 /dev/sda6입니다)
해서 연결된 장치를 지워주니 ssh 가 끊깁니다.;

원인인 즉슨, 제가 일반 유저로 로그인해서 su - 로
최고관리자 권한을 가져서 인데

이건
vi /etc/ssh/sshd_config
PermitRoot no <--- yes
/etc/init.d/sshd restart

요렇고롬 세팅 해주면 됩니다.

그런 문제없이 자연스레 umount 가 되시는 분은 그냥 넘어가십시요.

그다음 ext3grep –-dump-names --after=12146454 /dev/sda6
  위의 숫자는 unix time 입니다. php에서 mktime(시,분,초,월,일,연)
  해주면 쉽게 구할 수 있죠.(다른 방법있다면 그걸 선택하세요)

여튼 전 history 명령으로 제가 rm -rf 를 친 그 시점에대해서 복구하려고 위의
세팅을 맞췄습니다.


저렇게 하면 sdb1.ext3grep.stage1 와 sdb1.ext3grep.stage2
파일 비스므레한 파일이 생깁니다. ( 시간이  꽤 걸렸습니다 저는. 한시간 반정도?)
앞에껀 inode 정보 뒤에껀 디렉토리 정보죠.
사람이 읽을 수 있는건 뒤에꺼고요. 필요한건 두파일 모두입니다.

건들진 마세요. 그냥 두시면됩니다.


그다음 --restore-all  옵션과 --after 옵션으로
위에서 가져온 정보에 대해서 복구를 합니다. 다시 재차 조회해 오진 않으므로
시간소요는 적습니다.



이렇게 해서 제가 실행한 위치에 /RESTORE~~~~~ 어쩌구 폴더가 생기면서

그곳에 제 파티션의 파일들이 복구가 되었습니다. ^^ 아 사랑스러워. ^^

그 다음 다시 이 디바이스를 해당 폴더에 mount 시켜주고 복구된 파일을 /RESTORE 에서
원래의 장소로 복사해주면 끝.


정말...ㅜ.ㅜ 눈물을 머금고 처음부터 재작업을 하려고 했는데

이런걸 알게되다니... 위의 글을 써주신 분께 다시한번 감사를.


설명이 좀 부족해서 말이 엉킬수도 있겠네요.

여튼. ^^ 도움이되셨으면 좋겠습니다




http://phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=67637
반응형

'OS > LINUX' 카테고리의 다른 글

linux kernel panic에러시 복구  (0) 2010.02.02
NFS-네트웍을 이용한 파일시스템 공유  (0) 2009.12.21
RedHat Linux Network 설정하기  (0) 2009.10.29
LINUX SWAP파일 추가하기  (0) 2009.09.07
Linux 성능 조정 - tcp  (0) 2009.03.13
Posted by [PineTree]
OS/LINUX2009. 10. 29. 14:32
반응형

1. Default Gateway 설정 파일

파일 이름: /etc/sysconfig/network

- NETWORKING=yes

: 통신이 되도록 지원할 것인가의 여부(yes or no)

 

- HOSTNAME=bluestorm.co.kr

: 서버의 호스트네임(Hostname)을 설정

 

- GATEWAYDEV=eth0

: Default Gateway의 장치명

 

- GATEWAY=192.168.0.1

: 시스템 전체에 대한 Gateway 설정(/etc/sysconfig/network-scripts/ifcfg-eth0 파일에서 Gateway를 설정한다면 이 파일에서 설정한 Gateway가 /etc/sysconfig/network 설정보다 우선 적용)

 

- FORWARD_IPV4=no

: 시스템이 라우터 역할을 할 것인지 여부, 패킷 포워딩을 수행할 경우는 yes 그렇지 않을 경우는 no로 설정

 

2. Network Interface Card(NIC) 설정 파일 -> 윈도우의 인터넷 프로토콜(TCP/IP) 등록정보와 같음

파일 이름: /etc/sysconfig/network-scripts/ifcfg-ethx

: ifcfg-eth의 x는 0부터 시스템에 설치되어 있는 NIC 숫자 만큼 늘어남

 

- DEVICE=eth0

: 네트워크 디바이스의 장치명, Linux는 ethx로 네트워크 디바이스 장치명이 정해져 있음

 

- BOOTPROTO=static

: NIC에 IP Address를 Dynamic으로 설정할 것인지 아니면 Static으로 설정할 것인지 정함(dhcp=유동 IP 설정으로 DHCP Server를 통하여 IP Address를 받아옴, static=고정 IP 설정으로 관리자가 IP를 직접 입력)

-> 윈도우의 '자동으로 IP 주소 받기', '다음 IP 주소 사용'

 

- IPADDR=192.168.0.2

: eth0에 IP Address를 설정

-> 윈도우의 'IP 주소'

 

- BROADCAST=192.168.0.255

: Broadcast Address를 설정

 

- NETMASK=255.255.255.0

: Netmask 값을 설정

-> 윈도우의 '서브넷 마스크'

 

- NETWORK=192.168.0.0

: 해당 네트워크의 Network ID 설정

 

- ONBOOT=yes

: 해당 NIC를 시스템이 부팅할 때 활성화할지 여부(yes or no)

 

- USERCTL=no

: 해당 NIC를 root를 제외한 사용자가 On/Off 가능하게 할지 여부(yes=일반 사용자 가능, no=root 사용자만 가능)

 

- GATEWAY=192.168.0.1

: 해당 NIC의 Default Gateway를 설정, /etc/sysconfig/network 파일에서 설정한 Gateway 보다 우선 적용

-> 윈도우의 '기본 게이트웨이'

 

3. DNS 설정 파일 -> 윈도우의 인터넷 프로토콜(TCP/IP) 등록정보와 같음

파일 이름: /etc/resolv.conf

- search chosun.ac.kr

: Hostname만 지정했을 경우 뒤에 자동으로 chosun.ac.kr를 붙임

예제)

#telnet bluestorm 이라고 할 경우 bluestorm.chosun.ac.kr로 변경

 

- nameserver 168.126.63.1

: 네임서버의 IP Address를 지정, 네임서버의 지정 개수는 제한이 없고 응답이 없을 경우 다음에 지정한 네임서버를 사용

-> 윈도우의 '다음 DNS 서버 주소 사용'

 

※중요: 변경된 정보를 적용하기 위하여 시스템을 재부팅하거나 아래와 같은 명령을 사용한다.

: # /etc/rc.d/init.d/network restart

: # service network status | start | stop | restart
반응형

'OS > LINUX' 카테고리의 다른 글

NFS-네트웍을 이용한 파일시스템 공유  (0) 2009.12.21
리눅스 rm삭제햇을 때 복구  (0) 2009.11.06
LINUX SWAP파일 추가하기  (0) 2009.09.07
Linux 성능 조정 - tcp  (0) 2009.03.13
RHEL 4 에 YUM 설치  (0) 2009.02.10
Posted by [PineTree]
OS/LINUX2009. 9. 7. 21:29
반응형
256MB의 스왑파일을 만들어 보겠습니다. 먼저 스왑파일을 만들 공간을 설정합니다. 다음과 같은 명령을 내리면 /boot 디렉토리 밑에 256MB짜리 NULL 파일이 만들어 집니다. /dev/zero는 Null byte의 source를 뜻하며 생성하고자 하는 swap파일의 명칭은 편의상 swapfile로 하였습니다.
#dd if=/dev/zero of=/boot/swapfile bs=1024 count=262144


만든 파일이 스왑파일로 작동할 수 있도록 설정을 합니다. v0 옵션은 old 스타일이고, v1은 new 스타일입니다.
#mkswap -v1 /boot/swapfile

활성화를 시킵니다.
#swapon /boot/swapfile

free명령으로 스왑영역이 늘어난 것을 확인할 수 있습니다.
#free


부팅 시 스왑공간이 활성화되게 하려면 /etc/fstab 파일에 아래 한 줄을 추가합니다.
/boot/swapfile swap swap defaults 1 1
반응형

'OS > LINUX' 카테고리의 다른 글

리눅스 rm삭제햇을 때 복구  (0) 2009.11.06
RedHat Linux Network 설정하기  (0) 2009.10.29
Linux 성능 조정 - tcp  (0) 2009.03.13
RHEL 4 에 YUM 설치  (0) 2009.02.10
LINUX 해킹당했을 때 대처요령  (0) 2008.11.17
Posted by [PineTree]