ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 24년 8월 첫째주 (7/29 ~ 8/4)
    업무에_필요한_지식/Cloud모니터링 2024. 7. 28. 22:22

    0. VM의 ssh 접속 설정

    https://velog.io/@intellik/%EC%8B%A4%EB%A6%AC%EC%BD%98-%EB%A7%A5-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-%EA%B0%80%EC%83%81%EB%A8%B8%EC%8B%A0-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0

     

    실리콘 맥 환경에서 가상머신 생성하기

    실리콘 맥에서 리눅스 가상 머신을 만들어 보아요!

    velog.io

     

    1. 리눅스의 각 디렉토리는 어떤 역할을 하고 있고 무엇을 담고 있을까?

    내가 UTM에 설치한 Rocky의 디렉토리 구조는 아래와 같다.

    디렉토리가 꽤 많지만 하나씩 무슨 역할을 하는지 한 번 보도록 하자.

    디렉토리 구조

    루트 디렉토리 (/)

    • 모든 파일과 디렉토리의 최상위 디렉토리로, 시스템의 모든 파일이 이 위치에서 시작합니다.

    디렉토리 상세 설명

    1. /afs
      • Andrew File System과 관련된 디렉토리입니다. AFS는 분산 네트워크 파일 시스템으로, 일반적인 리눅스 배포판에는 기본적으로 사용되지 않습니다.
      • ls 해봐도 아무것도 나오지 않는다.
    2. /bin
      • 기본적인 시스템 명령어들이 저장된 디렉토리입니다. 사용자와 시스템 관리자가 공통으로 사용하는 명령어들이 포함됩니다. 예: ls, cp, mv, bash.
      • 각종 명령어들이 있는 걸 확인할 수 있다.
      • 있는 명령어 괜히 cat 해봤다가 난리도 아니었다. ㅎ
    3. /boot
      • 시스템 부팅에 필요한 커널 이미지와 초기 부팅 로더 설정 파일들이 저장된다. 예: 커널 이미지 (vmlinuz), 초기 RAM 디스크 이미지 (initrd), 부팅 로더 설정 파일 (grub.cfg).
    4. /dev
      • 장치 파일들이 위치한 디렉토리입니다. 리눅스에서 모든 장치는 파일 시스템 상의 파일로 나타나며, 이 디렉토리 내의 특수 파일을 통해 장치와 상호작용합니다. 예: sda1 (하드 디스크 파티션), tty (터미널 장치).
    5. /etc
      • 시스템 설정 파일과 구성 파일이 저장된 디렉토리입니다. 예: 사용자 계정 정보 (passwd), 네트워크 설정 (hosts, network), 데몬 설정 파일 (sshd_config).
    6. /home
      • 일반 사용자 계정의 홈 디렉토리가 위치한 디렉토리입니다. 각 사용자는 자신의 홈 디렉토리에서 개인 파일과 설정을 관리합니다. 예: /home/alice (사용자 alice의 홈 디렉토리).
    7. /lib
      • 기본 시스템과 관련된 라이브러리 파일이 저장된 디렉토리입니다. 주로 /bin 및 /sbin에 있는 명령어들을 실행하는 데 필요한 공유 라이브러리가 포함됩니다.
    8. /lib64
      • 64비트 시스템에서 사용하는 라이브러리 파일이 저장된 디렉토리입니다. /lib와 동일한 역할을 하지만, 64비트 환경에서 사용됩니다.
    9. /media
      • 시스템이 자동으로 마운트하는 이동식 미디어(예: USB 드라이브, CD/DVD)의 마운트 포인트를 위한 디렉토리입니다.
    10. /mnt
      • 일시적으로 파일 시스템을 마운트하는 데 사용되는 디렉토리입니다. 관리자가 필요에 따라 외부 디스크나 네트워크 파일 시스템을 수동으로 마운트할 때 사용합니다.
    11. /opt
      • 선택적(application) 소프트웨어 패키지가 설치되는 디렉토리입니다. 독립적인 애플리케이션들이 이곳에 설치되며, 시스템의 나머지 부분과는 별도로 관리됩니다.
    12. /proc
      • 가상 파일 시스템으로, 현재 실행 중인 프로세스와 커널에 대한 정보를 제공합니다. 예: 시스템 메모리 정보 (/proc/meminfo), CPU 정보 (/proc/cpuinfo).
    13. /root
      • 루트 사용자의 홈 디렉토리입니다. 일반 사용자들의 홈 디렉토리는 /home에 위치하지만, 루트 사용자는 /root 디렉토리를 사용합니다.
    14. /run
      • 시스템 초기화와 관련된 런타임 데이터가 저장되는 임시 파일 시스템입니다. 부팅 후 초기화 스크립트나 서비스들이 이곳에 상태 정보를 저장할 수 있습니다.
    15. /sbin
      • 시스템 관리자가 사용하는 중요한 시스템 명령어들이 저장된 디렉토리입니다. 예: fsck, reboot, ifconfig.
    16. /srv
      • 서비스 데이터가 저장되는 디렉토리입니다. 웹 서버나 FTP 서버와 같은 서비스에서 제공하는 데이터 파일들이 이곳에 위치할 수 있습니다.
    17. /sys
      • 시스템과 장치의 상태 정보를 제공하는 가상 파일 시스템입니다. 커널에서 관리하는 다양한 하드웨어 장치와 그 상태 정보를 담고 있습니다.
    18. /tmp
      • 임시 파일이 저장되는 디렉토리입니다. 애플리케이션이나 시스템에서 임시로 필요한 데이터를 이곳에 저장하며, 일반적으로 시스템 재부팅 시 이 디렉토리의 파일들은 삭제됩니다.
    19.  /usr
      • 사용자 프로그램과 관련된 파일들이 저장된 디렉토리입니다. 하위 디렉토리로는 /usr/bin (일반 사용자 명령어), /usr/sbin (시스템 관리 명령어), /usr/lib (라이브러리 파일), /usr/share (공유 데이터 파일) 등이 있습니다.
    20. /var
      • 가변 데이터 파일들이 저장되는 디렉토리입니다. 시스템 운영 중 자주 변화하는 데이터를 포함합니다. 예: 로그 파일 (/var/log), 캐시 데이터 (/var/cache), 스풀 파일 (/var/spool).
      • /var/spool: 스풀 파일(Spool file)은 컴퓨터 시스템에서 데이터를 일시적으로 저장하는 파일로, 일반적으로 인쇄 작업이나 메일 전송 등의 처리를 대기시키기 위해 사용됩니다. "스풀링(spooling)"이라는 용어는 "Simultaneous Peripheral Operations On-Line"의 약자로, 데이터의 입출력 장치가 데이터를 빠르게 처리할 수 있도록 일시적으로 저장해 두는 작업을 의미합니다.

    /var/cache에 저장되는 캐시는?

    더보기

    /var/cache 디렉토리는 리눅스와 유닉스 계열 운영 체제에서 사용되는 시스템 디렉토리로, 애플리케이션이나 서비스가 생성한 캐시 데이터를 저장하는 데 사용됩니다. 이 디렉토리에 저장되는 캐시 데이터는 다양한 유형의 파일이나 정보를 포함하며, 주로 애플리케이션의 성능을 향상시키고 데이터 접근 속도를 높이는 용도로 사용됩니다.

    /var/cache에 저장되는 일반적인 캐시 데이터

    1. 패키지 관리 캐시:
      • APT, YUM, DNF와 같은 패키지 관리자가 다운로드한 패키지 파일과 메타데이터를 저장합니다.
      • 이를 통해 사용자가 패키지를 설치할 때마다 인터넷에서 다시 다운로드하지 않고, 로컬 캐시에서 직접 가져올 수 있어 설치 속도가 빨라집니다.
    2. 브라우저 캐시:
      • 텍스트 기반 웹 브라우저(예: Lynx, w3m)나 서버 측 브라우저 캐시가 여기 저장될 수 있습니다.
      • 자주 방문하는 웹 페이지의 데이터를 캐시에 저장하여, 이후 방문 시 로딩 속도를 줄입니다.
    3. 폰트 캐시:
      • Fontconfig와 같은 시스템 서비스에서 사용되는 캐시입니다.
      • 폰트 렌더링 성능을 향상시키기 위해 폰트 메타데이터를 캐시합니다.
    4. 아이콘 캐시:
      • 데스크톱 환경이나 특정 애플리케이션에서 사용하는 아이콘 캐시가 포함될 수 있습니다.
      • 아이콘을 빠르게 로드하고 표시하기 위해 사용됩니다.
    5. 파일 시스템 캐시:
      • 특정 애플리케이션이 빠른 접근을 위해 파일 시스템 메타데이터를 캐시할 수 있습니다.
    6. 애플리케이션별 캐시:
      • 웹 서버, 데이터베이스 서버, 애플리케이션 서버 등의 애플리케이션이 사용하는 다양한 형태의 캐시가 포함될 수 있습니다.
      • 예를 들어, 웹 서버는 정적 콘텐츠(이미지, CSS 파일 등)를 캐시하여 더 빠르게 제공할 수 있습니다.

    캐시 데이터의 용도

    1. 성능 향상: 캐시는 자주 사용되는 데이터를 로컬에 저장하여, 네트워크나 디스크에서 데이터를 반복해서 읽어오는 시간을 줄입니다. 이는 특히 인터넷 연결이 느리거나 서버 응답 시간이 중요한 경우에 유용합니다.
    2. 자원 절약: 캐시를 사용하면 네트워크 대역폭과 서버의 자원을 절약할 수 있습니다. 예를 들어, 여러 클라이언트가 같은 데이터를 요청할 때, 캐시에 저장된 데이터를 제공함으로써 서버 부하를 줄일 수 있습니다.
    3. 사용자 경험 개선: 빠른 데이터 접근을 통해 애플리케이션의 반응성을 높여 사용자 경험을 개선합니다.

    관리와 정리

    캐시는 시간이 지남에 따라 크기가 커질 수 있으며, 오래되거나 불필요한 캐시 데이터를 정기적으로 정리하는 것이 좋습니다. 많은 시스템에서는 tmpfiles.d 규칙이나 애플리케이션 자체의 설정을 통해 자동으로 캐시를 관리하고 정리할 수 있습니다. 수동으로 캐시를 정리할 경우, 삭제하기 전에 각 애플리케이션이 어떻게 캐시를 사용하는지 이해하는 것이 중요합니다. 불필요한 캐시 삭제는 시스템 성능을 일시적으로 저하시킬 수 있으며, 필요한 데이터를 재생성하는 데 시간이 걸릴 수 있습니다.

     
     

     

    스풀 파일이란?

    더보기

    스풀 파일의 주요 용도

    1. 프린터 작업 스풀링:
      • 프린터는 상대적으로 속도가 느린 입출력 장치입니다. 여러 작업이 동시에 제출될 경우 프린터는 이를 한 번에 처리할 수 없기 때문에, 스풀 파일을 사용하여 인쇄할 데이터를 일시적으로 저장합니다. 이렇게 하면 시스템의 다른 작업들은 프린터의 처리 속도에 영향을 받지 않고 지속적으로 수행될 수 있습니다.
      • 일반적으로 운영 체제의 프린트 스풀러(spooler) 서비스가 인쇄 작업을 관리하며, 스풀 파일에 작업을 저장하고 차례로 프린터로 전송합니다.
    2. 이메일 시스템:
      • 이메일 시스템에서도 스풀 파일이 사용됩니다. 메일 서버는 보낸 메일을 스풀 파일에 저장한 후, 수신자가 준비되었을 때 메일을 전송합니다. 이 과정은 특히 수신 메일 서버가 일시적으로 응답하지 않거나 연결이 느린 경우 유용합니다.
    3. 배치 작업:
      • 대형 시스템에서 배치 작업(batch job)을 관리할 때도 스풀 파일을 사용합니다. 배치 작업은 즉시 실행되지 않고, 특정 조건이나 시간에 실행되기 위해 대기 상태에 놓일 수 있습니다. 이 경우, 스풀 파일에 작업 내용과 상태 정보를 저장해 둡니다.

    스풀 파일의 특성

    • 임시 저장소: 스풀 파일은 일시적인 저장소로 사용되며, 데이터는 필요한 장치나 시스템에서 처리될 때까지 대기합니다.
    • 비동기 처리: 스풀링은 데이터를 비동기적으로 처리할 수 있게 해줍니다. 예를 들어, 사용자는 인쇄 명령을 보낸 후 다른 작업을 할 수 있으며, 시스템은 인쇄 작업이 완료될 때까지 기다릴 필요가 없습니다.
    • 큐잉 시스템: 스풀링은 작업을 큐(queue) 형태로 관리합니다. 이로 인해 자원을 효과적으로 사용하고, 작업의 순서를 관리할 수 있습니다.

    요약

    스풀 파일은 데이터 입출력 장치의 효율적인 사용을 위해 데이터 처리를 일시적으로 저장하는 파일입니다. 주요 용도는 인쇄 작업, 이메일 전송, 배치 작업 처리 등이며, 시스템의 자원 사용을 최적화하고 비동기 처리를 가능하게 합니다.

    이 구조는 시스템의 안정성과 관리 효율성을 높이는 데 중요한 역할을 합니다. 각 디렉토리의 목적을 이해하면 리눅스 시스템을 보다 효과적으로 관리하고 사용할 수 있습니다.

     

    + /swap

    스왑은 Linux 기반 운영 체제에서 가상 메모리로 작동하는 저장 장치(예: HHD, SSD, 가상 저장 장치)의 전용 공간이다. 시스템의 사용 가능한 메모리가 부족할 때 물리적 RAM(Random Access Memory)을 보충하는 데 사용된다. 스왑 공간을 통해 운영 체제는 덜 자주 사용되는 데이터를 RAM에서 스왑 영역으로 이동하여 더 중요하거나 자주 액세스하는 데이터를 위해 RAM의 공간을 확보할 수 있다.

    스왑 공간은 스왑 파티션 또는 스왑 파일의 형태일 수 있다. 스왑 파티션은 저장 장치의 전용 파티션인 반면 스왑 파일은 기존 파일 시스템 내의 파일이다. 둘 다 동일한 목적을 수행한다.

     

    df -h 를 입력했을 때와는 다르게 lsblk를 입력했을 때 vda3 아래에 rl-swap이 있고,
    또 루트 디렉토리에 swap 디렉토리가 없는 이유가

    내가 설치한 Rocky 리눅스에서는 스왑 공간을 전용 파티션으로 설정하는 방식을 채택했기 때문이었던듯

     


    SWAP 장점
    • 메모리 부족 상황
      시스템의 RAM이 부족할 때 스왑 공간은 덜 중요한 데이터를 일시적으로 저장하여 더 중요한 데이터를 실제 메모리에 남길 수 있다.

    • 최대 절전 모드
      최대 절전 모드에서 시스템은 RAM의 전체 내용을 스왑 공간에 저장한 다음 전원을 끈다. 시스템이 다시 켜지면 스왑 공간의 내용이 RAM으로 복원되고 시스템은 이전 상태를 재개한다.

    SWAP 공간의 개념

    스왑 공간은 Linux 커널 메모리 관리 하위 시스템에서 제어하는 디스크 영역이다. 커널은 메모리에 비활성 페이지를 보관하여 시스템 RAM을 보완하기 위해 스왑 공간을 사용한다. 시스템의 가상 메모리에는 결합된 시스템 RAM과 스왑 공간이 포함된다.

     

    시스템의 메모리 사용량이 정의된 한도를 초과할 경우 커널은 RAM에서 프로세스에 할당된 유휴 메모리 페이 지를 검색한다. 커널은 유휴 페이지를 스왑 영역에 쓰고 RAM 페이지를 다른 프로세스에 다시 할당한다. 프로그램에서 디스크의 페이지에 액세스해야 하는 경우 커널은 메모리의 다른 유휴 페이지를 찾아 디스크에 쓴 다음 스왑 영역에서 필요한 페이지를 불러온다.

     

    스왑 영역이 디스크에 상주하므로 스왑은 RAM에 비해 속도가 느리다. 스왑 공간은 시스템 RAM을 늘리는 데 사용되지만, 워크로드에 비해 RAM이 부족한 경우 스왑 공간을 지속 가능한 해결책으로 간주해서는 안 되며, 물리적 메모리를 늘리는 것이 좋다.


    SWAP 공간 계산

    관리자는 시스템의 메모리 워크로드에 따라 스왑 공간의 크기를 조정해야 한다. 애플리케이션 벤더가 스왑 공간 계산에 대한 권장 사항을 제공하는 경우도 있다. 다음 표에는 실제 메모리 총량에 따른 지침이 나와 있다.

    RAM SWAP 공간 최대 절전 모드 시 SWAP 공간
    2GB 이하 RAM * 2 RAM * 3
    2~8 GB RAM과 동일 RAM * 2
    8~64GB 4GB 이상 RAM * 1.5
    64GB 이상 4GB 이상 권장되지 않음

    랩탑 및 데스크탑 최대 절전 모드 기능은 시스템의 전원을 끄기 전에 스왑 공간을 사용하여 RAM 내용을 저장 한다. 시스템을 다시 켜면 커널이 스왑 공간에서 RAM 내용을 복원하므로 완전한 부팅이 필요하지 않다. 해당 시스템의 경우 스왑 공간이 RAM 크기보다 커야 한다.

     

    해당 권장 사항은 말 그대로 권장 사항이므로 이렇게 꼭 맞춰서 할 필요는 없다.


    SWAP 스왑 관련 명령어

    스왑 공간 활성화 명령어를 시행하기 전에 다음 단계를 수행해야 한다.

     

    • 파일 시스템 유형이 linux-swap인 파티션을 생성한다. (parted, fdisk 등 명령어 사용)

    • 장치에서 스왑 시그니처를 저장한다. (mkswap 사용)

     

    1. SWAP 활설화

    sudo swapon /dev/sda5

     

    2.  SWAP 비활성화

    sudo swapoff /dev/sda5

     

    3. 장치 또는 파일에 스왑 영역을 설정

    sudo mkswap /dev/sda5


    4. 현재 활성화된 스왑 공간을 표시한다.

    swapon --show


    5. 시스템에서 사용 가능한 물리적 메모리와 스왑 메모리의 총량을 표시

    free -h

    이 예는 사람이 읽을 수 있는 형식(예: MB, GB)의 메모리 및 스왑 사용량을 보여준다.


    6. 지정된 크기로 미리 할당된 스왑 파일 생성

    sudo fallocate -l 2G /swapfile

    이 예에서는 /swapfile이라는 2GB 스왑 파일을 만든다.

     

    7. dd: 이 명령은 지정된 입력 파일을 복사하고 변환하여 스왑 파일을 만들 수도 있다.

    sudo dd if=/dev/zero of=/swapfile bs=1M count=2048

    이 예는 /dev/zero에서 데이터를 복사하여 /swapfile이라는 이름의 2GB 스왑 파일을 생성한다.


    8. 스왑 파일의 권한을 변경

    sudo chmod 600 /swapfile

    이 예제는 /swapfile의 권한을 루트 사용자만 읽고 쓸 수 있도록 설정한다.


    9. 시스템이 스왑 공간을 얼마나 적극적으로 사용하는지 결정하는 swappiness 값과 같은 런타임 시 커널 매개변수 구성

    sudo sysctl vm.swappiness=10

    이 예에서는 swappiness 값을 10으로 설정한다. 즉, 시스템이 덜 적극적으로 스왑 공간을 사용한다.


    스왑 공간으로 작업할 때 원하는 결과를 얻으려면 위 예시에서 설명한 명령어들 중 일부를 조합하여 사용해야 할 수도 있다.

    출처: https://easyitwanner.tistory.com/149 [IT 시작해보기:티스토리]

     

    2. LVM이랑 ... 좀 더 친해지기;;

     

     

     

    디스크를 물리 볼륨으로 초기화: pvcreate

    pvcreate 장치_파티션_경로
    # pvcreate /dev/vdb

     

     

    볼륨 그룹 생성: vgcreate

    vgcreate VG명 장치_파티션_경로_1 장치_파티션_경로_2 ...
    # vgcreate vg01 /dev/vdb /dev/vdc ...

     

    논리 볼륨 생성: lvcreate

    lvcreate -L LV용량 -n LV명 VG명
    # lvcreate -l 100%FREE -n lv01 vg01 : 잔여용량 전부 사용
    # lvcreate -L 10G -n lv01 vg01 : vg의 10G에 대해 lv를 생성

     

    파일 시스템 생성: mkfs

    mkfs.ext4 /dev/vg01/lv01
    # mkfs.ext4 /dev/vg01/lv01

     

    마운트 포인트 생성 및 마운트: mkdir, mount

    mkdir /mnt/lv01
    # mkdir 마운트_경로
    
    mount /dev/vg01/lv01 /mnt/lv01
    # mount 장치_파티션_경로 마운트_경로
    
    umount /dev/vg01/lv01
    # umount 장치_파티션_경로

     

    /etc/fstab 파일에 항목 추가: echo ... | tee -a /etc/fstab -> 자동 마운트

    echo '/dev/vg01/lv01 /mnt/lv01 ext4 defaults 0 2' >> /etc/fstab
    # echo '장치_파티션_경로 마운트_경로 ext4 defaults 0 2' >> /etc/fstab

     

    LVM 상태 확인: pvs, vgs, lvs

     

    작업 내용 

    [Linux1]

    [root@localhost ~]# lsblk
    NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
    sr0          11:0    1 1024M  0 rom
    vda         252:0    0   64G  0 disk
    ├─vda1      252:1    0  600M  0 part /boot/efi
    ├─vda2      252:2    0    1G  0 part /boot
    └─vda3      252:3    0 62.4G  0 part
      ├─rl-root 253:0    0 39.3G  0 lvm  /
      ├─rl-swap 253:1    0  3.9G  0 lvm  [SWAP]
      └─rl-home 253:2    0 19.2G  0 lvm  /home
    vdb         252:16   0   10G  0 disk
    vdc         252:32   0   10G  0 disk
    vdd         252:48   0   10G  0 disk
    
    [root@localhost ~]# pvcreate /dev/vdb
      Physical volume "/dev/vdb" successfully created.
    [root@localhost ~]# pvcreate /dev/vdc
      Physical volume "/dev/vdc" successfully created.
    [root@localhost ~]# pvcreate /dev/vdd
      Physical volume "/dev/vdd" successfully created.
      
    [root@localhost ~]# pvs
      PV         VG Fmt  Attr PSize  PFree
      /dev/vda3  rl lvm2 a--  62.41g     0
      /dev/vdb      lvm2 ---  10.00g 10.00g
      /dev/vdc      lvm2 ---  10.00g 10.00g
      /dev/vdd      lvm2 ---  10.00g 10.00g
      
    [root@localhost ~]# vgcreate vg01 /dev/vdb /dev/vdc
      Volume group "vg01" successfully created
    [root@localhost ~]# vgcreate vg02 /dev/vdd
      Volume group "vg02" successfully created
    [root@localhost ~]# vgs
      VG   #PV #LV #SN Attr   VSize   VFree
      rl     1   3   0 wz--n-  62.41g      0
      vg01   2   0   0 wz--n-  19.99g  19.99g
      vg02   1   0   0 wz--n- <10.00g <10.00g
      
    [root@localhost ~]# lvcreate -L 5G -n lv01 vg01
      Logical volume "lv01" created.
    [root@localhost ~]# lvcreate -l 100%FREE -n lv02 vg02
      Logical volume "lv02" created.
    [root@localhost ~]# lvs
      LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      home rl   -wi-ao---- <19.18g
      root rl   -wi-ao---- <39.29g
      swap rl   -wi-ao----   3.94g
      lv01 vg01 -wi-a-----   5.00g
      lv02 vg02 -wi-a----- <10.00g

    3. RAW Device 생성하기 (a.k.a 삽질)

      1.raw device 설명

     

         

        - raw device는 커널을 거치지 않고 바로 버퍼 캐시에 접근을 하는 디스크 방식이어서 파일시스템 디스크보다 속도에서 이점을 갖는다. 

        - raw device를 여러 장치에서 사용하는 게 가능하다.

     

      2.raw device 사용 목적

         - 보통은 오라클과 같은 DBMS에서 많이 사용한다. ( 아니, 했었다.)

     

      3.raw device 장단점

     



    - 장점

      - OS 측면에서 커널을 거치지 않고 즉시 USER cache로 접근을 해 OS에 가해지는 부하가 적어집니다.

        그걸로 인해 OS OVERHEAD 회피 가능하고 OS BUFFER SIZE를 줄일 수 있는 것입니다.

      - I/O이 파일시스템 보다 빠른 이유는 파일시스템은 커널을 거치고 유저 메모리에 도착하지만 

        raw device는 바로 유저 메모리로 출발해서 보다 빠른 I/O이 가능합니다.

      

    - 단점 

      - 파일시스템은 OS에서 관리를 할 수 있어 생성이 쉽지만 raw device는 OS에서 접근이 힘들어 SETUP 하기 어렵습니다.

      - 파일시스템은 BACKUP이 쉽지만 raw device는 BACKUP 과정이 보다 복잡합니다.

      - OS에서 cylinder 0을 보호하지 못하기에 raw device를 만들 때 cylinder 0을 피해야 합니다.

     

      4.raw device 생성

         - disk 확인

             - raw device를 만들기 위해 디스크 한 개를 전부다 사용해야 합니다.

     

          - LVM생성 및 확인

    이전 버전 리눅스의 raw device 생성 방법

    더보기

      - 만든 디스크를 LVM으로 만들고 raw device로 사용하기 위해 

         - /etc/udev/rules.d/70-persistent-ipoib.rules에 밑의 내용을 입력합니다.

     

     

         - raw device설정

         

     

         여기서 OWNER와 GROUP은 raw device를 소유해야 하는 유저와 그룹으로 바꿔 주시면 됩니다.

         

         - raw device 적용 및 확인

        sudo udevadm control --reload-rules
        sudo udevadm trigger

     

         raw device를 즉시 적용하기 위해 명령어를 입력해 즉시 적용시켜주면 raw -qa 명령어로 현재 쓸 수 있는 raw device를 보여줍니다.

     

         - raw device 추가 

         

     

         여러 개의 raw device를 만든다면 위와 같이 추가를 해주면 됩니다 

     

         - raw device 적용 및 확인

         

     

         - 예시 파일

     

          "/usr/lib/udev/rules.d/60-raw.rules" 밑에 그림과 같이 예시로 쓸 수 있는 파일이 있습니다. 이 파일을 복사해서 /etc/udev/rules.d/밑에 넣어 주석 처리를 삭제하면 됩니다.

     

      5.raw device 삭제

         - raw device 적용 및 확인

        현재 raw device 2번을 사용하지 않아 제거합니다.
     

         - raw device설정

         


         ENV로 적어둔 줄을 삭제한뒤 리붓을 하면 raw device가 적용되어 raw2가 삭제됩니다. 

     

         - raw device 삭제 확인 

         

     

    위의 과정을 따라하다가 겪은 일

    1. raw 명령어가 먹히질 않는다:
    혹자는 blockdev 명령어로 몇 가지 옵션을 주어 비슷한 기능을 구현할 수 있다고 한다. 하지만 blockdev는 말 파일시스템 명령어이고 raw device는 파일시스템을 거치지 않고 데이터를 다루는 것인데 이게 되는 건가? 말이 좀 이상해서 좀 더 알아봐야할 것 같다.

     

    block dev. v.s raw dev.
    블록장치에 액세스할 때 시스템 버퍼 캐시를 통해 데이터를 읽고 쓰는데, 버퍼는 사용 후 해제돼도 버퍼캐시 내의 데이터는 한동안 남아 있다. 원시장치(raw device) 를 통해 액세스한 데이터는 버퍼캐시를 통해 읽히지 않는다는 차이가 있다.


    2. 11c 이전의 Oracle DB에서는 raw device를 사용할 수 있었으나 이후의 버전은 컨테이너 db만 설치 가능하게 해 raw device 사용이 불가능 하다고 한다.

    https://positivemh.tistory.com/1090

     

    Oracle 23c Free non-container 설치 시도(실패)

    OS 환경 : Oracle Linux 8.4 (64bit) DB 환경 : Oracle Database 23.3.0.23.09 Free 방법 : Oracle 23c Free non-container 설치 테스트기본적으로 Oracle 21c부터는 non-container 사용이 불가능함무조건 container database를 사용해야

    positivemh.tistory.com

    3. 찾아보니 Tibero 는 아직도 raw device를 사용할 수 있는 버전이 있다고 한다.

    https://jsp5247.tistory.com/96

     

    Tibero TAC 설치 방법(Rawdevice 구성)

    설치를 위해서 리눅스 8.6에서 진행했고 Tibero바이너리는 Tibero를 통해서 제공 받은 바이너리로 진행 하였다. OS : Red Hat Enterprise Linux release 8.6 (Ootpa) DB : Tibero6 FS06 database TAC 3node 설치+ Rawdevice 구성(

    jsp5247.tistory.com

     

    신이 나서(?) T max에 회원가입도 하고 데모 신청을 했다. (근데 여기 사이트가 진짜 오래된 느낌 낭낭)
    데모 신청도 특이하다. 어찌저찌 받았다. 근데.......

    .... 맥북에서는 사용이 불가하다 ㅎ.

    4. https://www.qemu.org/docs/master/system/qemu-block-drivers.html

     

    QEMU block drivers reference — QEMU documentation

    QEMU block drivers reference Edit on GitLab QEMU block drivers reference Synopsis QEMU block driver reference manual Description Disk image file formats QEMU supports many image file formats that can be used with VMs as well as with any of the tools (like

    www.qemu.org

    5. 결국 찾고야 만 것은....

    https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/pdf/considerations_in_adopting_rhel_9/Red_Hat_Enterprise_Linux-9-Considerations_in_adopting_RHEL_9-en-US.pdf

    대체제도 없이, raw cli tool 을 통으로 날려버렸다는 사실을 5시간 넘는 삽질 끝에 알게되었다. ^^

    왜 없어졌는지에 대해서도 찾아봤는데 아래의 사진에서 처럼 raw device는 O_DIRECT가 개발되기 전에나 쓰이던 것이라고한다.

    https://en.wikipedia.org/wiki/Talk:Raw_device

     

    Talk:Raw device - Wikipedia

    From Wikipedia, the free encyclopedia terms rawdevice and blockdevice are confused. in linux eg a rawdevice<===> is a special method for accessing blockdevices without using the caching mechanisms of the operating system. database systems tend to implement

    en.wikipedia.org

     

    결론: 

     raw device는 RHEL9 기반의 리눅스에서는 더이상 쓰이지 않는 개념이고

    이를 blockdev의 O_DIRECT(=OS 버퍼 사용하지 않는 옵션)이 대체하고 있다.

    https://cyber93.tistory.com/99#google_vignette

     

    블럭 디바이스(Block device) I/O - 1

    * 출처: http://superkkt.com/372 하드디스크와 같은 블럭 디바이스(Block device)에 I/O를 하는 방법은 크게 다음과 같이 나눌 수 있다. 1. 일반적인 방법의 I/O 2. O_SYNC를 사용한 동기 I/O 3. O_DIRECT를 사용한 직

    cyber93.tistory.com

     


    4. NFS에 사용되는 포트는 몇 번일까?

    NFS에서 사용되는 포트

    NFS는 여러 서비스와 포트를 사용하여 작동합니다. 이 중 일부는 고정된 포트 번호를 사용하고, 나머지는 동적으로 할당됩니다.

    1. Portmapper/RPCbind (포트 111)
      • portmapper 또는 rpcbind는 RPC 서비스의 포트를 관리합니다. 클라이언트는 이 포트를 통해 서버에서 실행 중인 NFS 관련 서비스의 포트를 조회합니다. 모든 NFS 통신의 시작점입니다.
    2. NFS 데몬 (일반적으로 포트 2049)
      • 실제 NFS 프로토콜 통신이 이루어지는 포트입니다. NFS 클라이언트와 서버 간의 파일 시스템 요청(파일 읽기, 쓰기 등)은 이 포트를 통해 전달됩니다.
    3. Mountd (포트 동적 할당, 보통 20048)
      • 클라이언트의 파일 시스템 마운트 요청을 처리합니다. 클라이언트는 이 포트를 사용하여 서버에 마운트할 디렉터리를 요청합니다. 포트 번호는 동적으로 할당되지만, 설정을 통해 고정할 수 있습니다.
    4. Statd (포트 동적 할당)
      • statd는 클라이언트와 서버 간의 파일 잠금 상태를 관리합니다. 시스템 재시작 후에도 잠금 상태를 복원하는 역할을 합니다. 포트 번호는 동적으로 할당됩니다.
    5. Lockd (포트 동적 할당)
      • lockd는 파일 잠금 요청을 처리합니다. 여러 클라이언트가 동일한 파일에 접근할 때 발생할 수 있는 충돌을 방지하기 위해 사용됩니다. 포트 번호는 동적으로 할당됩니다.

    포트 설정 및 방화벽 고려사항

    • 동적 포트 할당: Mountd, Statd, Lockd와 같은 일부 NFS 서비스는 포트를 동적으로 할당합니다. 방화벽 설정 시 이러한 동적 포트를 허용해야 할 수 있습니다.
    • 고정 포트 설정: 포트를 고정하면 방화벽에서 해당 포트를 열어 네트워크 보안을 더 쉽게 관리할 수 있습니다. /etc/sysconfig/nfs 또는 /etc/nfs.conf 파일에서 포트를 고정할 수 있습니다.

    NFS는 다양한 환경에서 파일 시스템을 공유하는 데 유용하지만, 보안 설정과 성능 튜닝이 중요한 역할을 합니다.

     

     

     

    FTP와 SSH에 사용되는 포트 번호

    1. FTP (File Transfer Protocol): 포트 번호 21
      • FTP는 인터넷에서 파일을 전송하는 데 사용되는 표준 네트워크 프로토콜입니다. 기본적으로 포트 21을 사용하여 서버와 클라이언트 간에 명령과 데이터를 교환합니다. FTP는 별도의 데이터 전송 채널을 사용하며, 데이터 전송을 위해 추가적인 포트(일반적으로 포트 20)를 사용할 수 있습니다.
    2. SSH (Secure Shell): 포트 번호 22
      • SSH는 네트워크를 통한 보안 통신을 제공하는 프로토콜로, 주로 원격 시스템에 안전하게 로그인하고 명령을 실행하는 데 사용됩니다. 기본적으로 포트 22를 사용합니다. SSH는 암호화된 통신 채널을 제공하여 보안성을 강화합니다.

    1024번 이내의 포트 용도

    0에서 1023번 사이의 포트 번호는 "Well-Known Ports" 또는 **"System Ports"**로 알려져 있으며, 주요 네트워크 프로토콜과 서비스에 예약되어 있습니다. 주요 포트와 그 용도는 다음과 같습니다:

    • 20, 21: FTP (File Transfer Protocol)
      • 포트 21은 FTP 제어 채널에, 포트 20은 데이터 채널에 사용됩니다.
    • 22: SSH (Secure Shell)
      • 보안 원격 로그인 및 명령어 실행에 사용됩니다.
    • 23: Telnet
      • 원격 로그인 프로토콜로, 텍스트 기반 네트워크 통신에 사용됩니다. 보안 문제로 인해 현대 시스템에서는 잘 사용되지 않습니다.
    • 25: SMTP (Simple Mail Transfer Protocol)
      • 이메일 전송 프로토콜로, 메일 서버 간의 이메일 전송에 사용됩니다.
    • 53: DNS (Domain Name System)
      • 도메인 이름을 IP 주소로 변환하는 데 사용되는 프로토콜입니다. 일반적으로 UDP와 TCP를 모두 사용합니다.
    • 67, 68: DHCP (Dynamic Host Configuration Protocol)
      • 네트워크 장치에 동적으로 IP 주소를 할당하는 데 사용됩니다. 포트 67은 서버가, 포트 68은 클라이언트가 사용합니다.
    • 80: HTTP (HyperText Transfer Protocol)
      • 월드 와이드 웹을 위한 기본 프로토콜로, 웹 브라우저와 웹 서버 간의 데이터 전송에 사용됩니다.
    • 110: POP3 (Post Office Protocol version 3)
      • 이메일 수신 프로토콜로, 사용자가 서버에서 이메일을 다운로드하는 데 사용됩니다.
    • 119: NNTP (Network News Transfer Protocol)
      • 뉴스 서버 간의 뉴스 게시물 전송에 사용되는 프로토콜입니다.
    • 143: IMAP (Internet Message Access Protocol)
      • 이메일 수신 프로토콜로, 서버에서 이메일을 검색하고 관리하는 데 사용됩니다.
    • 161, 162: SNMP (Simple Network Management Protocol)
      • 네트워크 장치를 모니터링하고 관리하는 데 사용됩니다. 포트 161은 관리 요청에, 포트 162는 관리 트랩에 사용됩니다.
    • 194: IRC (Internet Relay Chat)
      • 실시간 인터넷 텍스트 통신 프로토콜입니다.
    • 443: HTTPS (HTTP Secure)
      • 암호화된 웹 통신을 제공하는 HTTP의 보안 버전입니다.
    • 514: Syslog
      • 시스템 로그 메시지를 전송하는 데 사용되는 프로토콜입니다.

    Iptables

     

    iptables는 Linux 운영 체제에서 네트워크 트래픽을 필터링하고 방화벽 규칙을 관리하기 위한 명령 줄 도구입니다. iptables는 패킷 필터링 프레임워크인 netfilter의 사용자 공간 프로그램으로, 네트워크 데이터 패킷의 수락, 거부, 리디렉션 등을 제어할 수 있습니다.

    주요 기능

    1. 패킷 필터링: iptables를 사용하면 네트워크 인터페이스를 통해 들어오고 나가는 패킷을 필터링할 수 있습니다. 이는 특정 IP 주소, 포트, 프로토콜 등을 기반으로 트래픽을 허용하거나 차단하는 규칙을 정의하는 데 사용됩니다.
    2. 네트워크 주소 변환(NAT): iptables는 IP 마스커레이딩, 포트 포워딩 등 NAT 기능을 제공합니다. 이를 통해 내부 네트워크와 외부 네트워크 간의 트래픽 라우팅을 제어할 수 있습니다.
    3. 패킷 조작: 패킷의 내용이나 헤더를 변경하는 규칙을 설정할 수 있습니다. 예를 들어, 특정 조건을 만족하는 패킷의 목적지 주소를 변경하는 것과 같은 작업이 가능합니다.
    4. 상태 추적: iptables는 연결 추적 기능을 통해 패킷의 상태(새 연결, 기존 연결, 연결 추적 실패 등)를 기반으로 필터링을 수행할 수 있습니다.

    주요 체인

    iptables는 네트워크 패킷의 흐름에 따라 트래픽을 처리하는 체인(Chain)으로 구성됩니다. 각 체인은 패킷을 처리하는 특정 단계에 해당하며, 주요 체인은 다음과 같습니다:

    1. INPUT: 시스템으로 들어오는 패킷에 대한 규칙을 정의합니다. 주로 로컬 시스템에 전달되는 패킷을 필터링합니다.
    2. OUTPUT: 시스템에서 나가는 패킷에 대한 규칙을 정의합니다. 로컬 시스템에서 발생한 트래픽을 제어합니다.
    3. FORWARD: 시스템을 통과하는 패킷(즉, 라우터로 사용되는 경우)의 필터링을 처리합니다.
    4. PREROUTING: 패킷이 라우팅되기 전에 적용됩니다. 주로 NAT와 관련된 작업에 사용됩니다.
    5. POSTROUTING: 패킷이 라우팅된 후에 적용됩니다. 주로 소스 네트워크 주소 변환(SNAT)과 같은 NAT 작업에 사용됩니다.

    기본 명령 구조

    iptables 명령어는 체인, 규칙, 작업을 지정하여 방화벽 규칙을 설정합니다. 예를 들어:

    • 규칙 추가: 특정 체인에 규칙을 추가합니다.이 명령은 SSH(포트 22)로 들어오는 TCP 트래픽을 허용하는 규칙을 INPUT 체인에 추가합니다.
      sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    • 규칙 삭제: 특정 체인에서 규칙을 삭제합니다.INPUT 체인에서 SSH 트래픽을 허용하는 규칙을 제거합니다.
      sudo iptables -D INPUT -p tcp --dport 22 -j ACCEPT
    • 규칙 목록: 현재 설정된 규칙을 나열합니다.
      sudo iptables -L
    • 정책 설정: 체인의 기본 정책(예: 허용, 거부)을 설정합니다.
      sudo iptables -P INPUT DROP

    iptables는 고급 네트워크 보안 및 트래픽 관리 도구로서, 적절한 규칙 설정을 통해 시스템 보안을 강화할 수 있습니다. 그러나 복잡한 규칙을 다룰 때는 네트워크 연결에 영향을 미칠 수 있으므로 주의가 필요합니다.

     

    https://docs.rockylinux.org/ko/guides/security/firewalld-beginners/

     

    초보자를 위한 firewalld - Documentation

    초보자를 위한 firewalld 소개 오래 전에 나는 작고 새내기 컴퓨터 사용자로서 방화벽을 가지는 것이 아주 좋다는 얘기를 들었습니다. 내 컴퓨터로 무엇이 들어오고 무엇이 나가는지 내가 결정할

    docs.rockylinux.org

     

    nfs 설정중에 "firewall-cmd --permanent --add-service=nfs" 이 명령어를 입력하는데

    전후로 어떤 차이가 있는지 보자.

     

    [root@localhost /]# firewall-cmd --list-all
    public (active)
      target: default
      icmp-block-inversion: no
      interfaces: enp0s1
      sources:
      services: cockpit dhcpv6-client ssh
      ports:
      protocols:
      forward: yes
      masquerade: no
      forward-ports:
      source-ports:
      icmp-blocks:
      rich rules:

     

    [root@localhost ~]# firewall-cmd --permanent --add-service=nfs

     

    [root@localhost ~]# firewall-cmd --list-all
    public (active)
      target: default
      icmp-block-inversion: no
      interfaces: enp0s1
      sources:
      services: cockpit dhcpv6-client nfs ssh
      ports: 22/tcp
      protocols:
      forward: yes
      masquerade: no
      forward-ports:
      source-ports:
      icmp-blocks:
      rich rules:

     

     

    Linux1과 Linux2에 Linux1의 lv02를 nfs로 공유해둔상태

    Linux1 :

    [root@localhost /]# cat /mnt/lv02/
    lost+found/ test.txt
    [root@localhost /]# cat /mnt/lv02/test.txt
    So Sick of it

     

    Linux2 :

    [root@localhost /]# df -h| grep /mnt/nfs/lv02
    192.168.64.17:/mnt/lv02  9.8G     0  9.3G   0% /mnt/nfs/lv02
    [root@localhost /]# ls /mnt/nfs/lv02
    lost+found  test.txt
    [root@localhost /]# cat /mnt/nfs/lv02/test.txt
    So Sick of it

     

    이 때 firewall-cmd로 linux1에서 linux2로 나가는 네트워크를 차단해보겠다.(사내시스템에서 외부인터넷에 이렇게 하나..?)

     

    linux1

    [root@localhost /]# firewall-cmd --list-all
    public (active)
      target: default
      icmp-block-inversion: no
      interfaces: enp0s1
      sources:
      services: cockpit dhcpv6-client nfs ssh
      ports: 22/tcp
      protocols:
      forward: yes
      masquerade: no
      forward-ports:
      source-ports:
      icmp-blocks:
      rich rules:
    [root@localhost /]# sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' destination address='192.168.64.18' reject"
    sudo firewall-cmd --reload
    success
    success
    [root@localhost /]# ping 192.168.64.18
    PING 192.168.64.18 (192.168.64.18) 56(84) bytes of data.
    From 192.168.64.18 icmp_seq=1 Destination Port Unreachable
    From 192.168.64.18 icmp_seq=2 Destination Port Unreachable
    From 192.168.64.18 icmp_seq=3 Destination Port Unreachable
    From 192.168.64.18 icmp_seq=4 Destination Port Unreachable
    From 192.168.64.18 icmp_seq=5 Destination Port Unreachable
    From 192.168.64.18 icmp_seq=6 Destination Port Unreachable
    From 192.168.64.18 icmp_seq=7 Destination Port Unreachable
    From 192.168.64.18 icmp_seq=8 Destination Port Unreachable
    From 192.168.64.18 icmp_seq=9 Destination Port Unreachable
    ^C
    --- 192.168.64.18 ping statistics ---
    9 packets transmitted, 0 received, +9 errors, 100% packet loss, time 8007ms
    [root@localhost /]# firewall-cmd --list-all
    public (active)
      target: default
      icmp-block-inversion: no
      interfaces: enp0s1
      sources:
      services: cockpit dhcpv6-client nfs ssh
      ports: 22/tcp
      protocols:
      forward: yes
      masquerade: no
      forward-ports:
      source-ports:
      icmp-blocks:
      rich rules:
    	rule family="ipv4" destination address="192.168.64.18" reject

     

    이번에는 linux2에다가 linux1으로부터 오는 네트워크를 다 차단하라고 할 거다.

    (이건 뭐랄까 아무거나 다운로드 못하게 막을 때 이렇게 하나 싶고,...)

     

    linux2

    [root@localhost /]# sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.64.17' reject"
    sudo firewall-cmd --reload
    success
    success
    [root@localhost /]# firewall-cmd --list-all
    public (active)
      target: default
      icmp-block-inversion: no
      interfaces: enp0s1
      sources:
      services: cockpit dhcpv6-client ssh
      ports: 22/tcp
      protocols:
      forward: yes
      masquerade: no
      forward-ports:
      source-ports:
      icmp-blocks:
      rich rules:
    	rule family="ipv4" source address="192.168.64.17" reject

     

    linux1

    [root@localhost /]# ping 192.168.64.18
    PING 192.168.64.18 (192.168.64.18) 56(84) bytes of data.
    From 192.168.64.18 icmp_seq=1 Destination Port Unreachable
    From 192.168.64.18 icmp_seq=2 Destination Port Unreachable
    From 192.168.64.18 icmp_seq=3 Destination Port Unreachable
    From 192.168.64.18 icmp_seq=4 Destination Port Unreachable
    ^C
    --- 192.168.64.18 ping statistics ---
    4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3000ms

     

    linux2

    [root@localhost /]# sudo firewall-cmd --permanent --remove-rich-rule="rule family='ipv4' source address='192.168.64.18' reject"
    success
    [root@localhost /]# sudo firewall-cmd --reload
    success
    [root@localhost /]# sudo firewall-cmd --list-all
    public (active)
      target: default
      icmp-block-inversion: no
      interfaces: enp0s1
      sources:
      services: cockpit dhcpv6-client ssh
      ports: 22/tcp
      protocols:
      forward: yes
      masquerade: no
      forward-ports:
      source-ports:
      icmp-blocks:
      rich rules:

     

    linux1

    [root@localhost /]# ping 192.168.64.18
    PING 192.168.64.18 (192.168.64.18) 56(84) bytes of data.
    64 bytes from 192.168.64.18: icmp_seq=1 ttl=64 time=10.3 ms
    64 bytes from 192.168.64.18: icmp_seq=2 ttl=64 time=2.77 ms
    64 bytes from 192.168.64.18: icmp_seq=3 ttl=64 time=2.74 ms
    64 bytes from 192.168.64.18: icmp_seq=4 ttl=64 time=7.46 ms
    64 bytes from 192.168.64.18: icmp_seq=5 ttl=64 time=4.83 ms
    64 bytes from 192.168.64.18: icmp_seq=6 ttl=64 time=2.68 ms
    64 bytes from 192.168.64.18: icmp_seq=7 ttl=64 time=2.85 ms
    64 bytes from 192.168.64.18: icmp_seq=8 ttl=64 time=2.84 ms
    ^C
    --- 192.168.64.18 ping statistics ---
    8 packets transmitted, 8 received, 0% packet loss, time 7017ms
    rtt min/avg/max/mdev = 2.684/4.561/10.321/2.683 ms

     

    '업무에_필요한_지식 > Cloud모니터링' 카테고리의 다른 글

    9월 둘째 주(9/9~9/13)  (0) 2024.09.08
    24년 8월 넷째주 (8/21 ~ 8/27)  (0) 2024.08.28
    24년 7월 넷째주 (7/22~7/28)  (1) 2024.07.22
    24년 7월 셋째주  (0) 2024.07.15
    24년 6월 넷째주  (0) 2024.06.25
Designed by Tistory.