VM에 영구 디스크 추가

이 페이지의 안내에 따라 비부팅 디스크를 만들어 가상 머신 (VM)에 연결합니다.

시작하기 전에

gdcloud 명령줄 인터페이스 (CLI) 명령어를 사용하려면 gdcloud CLI를 다운로드, 설치, 구성해야 합니다. GDC 오프라인 어플라이언스의 모든 명령어는 gdcloud 또는 kubectl CLI를 사용하며 운영체제 (OS) 환경이 필요합니다.

kubeconfig 파일 경로 가져오기

관리 API 서버에 대해 명령어를 실행하려면 다음 리소스가 있어야 합니다.

  1. 관리 API 서버 이름을 찾거나 플랫폼 관리자 (PA)에게 서버 이름을 문의합니다.

  2. 관리 API 서버의 kubeconfig 파일이 없는 경우 로그인 및 생성합니다.

  3. 이 안내에서 경로를 사용하여 MANAGEMENT_API_SERVER{"</var>"}}을 바꿉니다.

권한 및 액세스 요청

이 페이지에 나열된 작업을 수행하려면 프로젝트 VirtualMachine 관리자 역할이 있어야 합니다. 단계에 따라 VM이 있는 프로젝트의 네임스페이스에서 확인하거나 프로젝트 IAM 관리자가 프로젝트 VirtualMachine 관리자 (project-vm-admin) 역할을 할당하도록 합니다.

GDC 콘솔 또는 gdcloud CLI를 사용하는 VM 작업의 경우 프로젝트 IAM 관리자에게 프로젝트 VirtualMachine 관리자 역할과 프로젝트 뷰어 (project-viewer) 역할을 모두 할당해 달라고 요청하세요.

VM에 디스크 연결

비부팅 디스크를 만들어 VM에 연결합니다. 각 추가 디스크는 맞춤 이미지나 빈 디스크를 지정할 수 있습니다. VM에 여러 디스크를 한 번에 추가할 수 있습니다.

콘솔

  1. 탐색 메뉴에서 가상 머신 > 인스턴스를 클릭합니다.

  2. VM 목록에서 VM 이름을 클릭하여 세부정보를 확인합니다.

  3. 새 디스크 추가를 클릭합니다.

  4. 확인 대화상자에서 중지를 클릭하여 VM을 중지합니다.

  5. VM이 중지될 때까지 몇 분 정도 기다립니다.

  6. 새로고침을 클릭합니다.

  7. VM이 중지된 상태일 때 새 디스크 추가를 다시 클릭합니다.

  8. 디스크 추가 대화상자에서 새 디스크 또는 기존 디스크를 선택합니다.

    • 새 디스크를 프로비저닝하려면 새 디스크 탭을 클릭합니다.

      1. 디스크 이름 필드에 프로젝트에 고유한 새 디스크 이름을 입력합니다.
      2. 크기 필드에 디스크 크기를 입력합니다(10~65, 536GiB). 예를 들어 10GiB입니다.
      3. 삭제 규칙 섹션에서 디스크 유지 또는 디스크 삭제를 클릭합니다.
    • 기존 디스크를 선택하려면 기존 디스크 탭을 클릭합니다.

      1. 디스크 목록에서 디스크를 선택합니다.
      2. '삭제 규칙' 섹션에서 디스크 유지 또는 디스크 삭제를 클릭합니다.
  9. 저장을 클릭합니다. 디스크가 VM의 디스크 목록에 표시됩니다.

  10. VM을 다시 시작합니다.

API

  1. VirtualMachineDisk을 만듭니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER apply -n PROJECT -f - <<EOF
    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachineDisk
    metadata:
      name: NON_BOOT_BLANK_DISK
    spec:
      size: NON_BOOT_BLANK_DISK_SIZE
    EOF
    
  2. VM을 중지합니다.

  3. 기존 VirtualMachine spec.disksVirtualMachineDisk를 추가합니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER edit virtualmachines.virtualmachine.gdc.goog -n PROJECT VM_NAME
    

    텍스트 편집기에서 다음을 수정합니다.

    …
    disks:
    - virtualMachineDiskRef:
        name: VM_BOOT_DISK_NAME
        boot: true
    - virtualMachineDiskRef:
        name: NON_BOOT_BLANK_DISK
        autoDelete: false
    …
    

    다음 정의를 사용하여 변수를 바꿉니다.

    변수정의
    MANAGEMENT_API_SERVER 관리 API 서버 kubeconfig 파일입니다.
    PROJECT VM을 만들 Google Distributed Cloud 에어 갭 적용 어플라이언스 (GDC) 프로젝트입니다.
    VM_NAME새 VM의 이름입니다.
    VM_BOOT_DISK_NAME새 VM 부팅 디스크의 이름입니다.
    NON_BOOT_BLANK_DISK추가 디스크의 이름입니다.
    NON_BOOT_BLANK_DISK_SIZE추가 디스크의 크기입니다(예: 20G).
  4. VM을 시작합니다.

비부팅 디스크 포맷 및 마운트

디스크를 VM에 연결한 후 VM 내에서 액세스할 수 있도록 다음 필수 단계를 실행합니다.

VM에 연결

VM에 SSH를 통해 연결하기

디스크 포맷

  1. 일련번호별로 인스턴스에 연결된 디스크를 나열하고 포맷하고 마운트하려는 디스크를 찾습니다.

    ls -l /dev/disk/by-id/
    

    이 예시 출력에서는 디스크 이름이 일련번호로 표시됩니다.

       total 0
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 ata-QEMU_HARDDISK_agentSADisk -> ../../sdc
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-0ATA_QEMU_HARDDISK_agentSADisk -> ../../sdc
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot -> ../../sda
       lrwxrwxrwx 1 root root 10 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot-part1 -> ../../sda1
       lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot-part14 -> ../../sda14
       lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot-part15 -> ../../sda15
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-data -> ../../sdb
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-1ATA_QEMU_HARDDISK_agentSADisk -> ../../sdc
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-SATA_QEMU_HARDDISK_agentSADisk -> ../../sdc
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot -> ../../sda
       lrwxrwxrwx 1 root root 10 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot-part1 -> ../../sda1
       lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot-part14 -> ../../sda14
       lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot-part15 -> ../../sda15
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-data -> ../../sdb
    

    각 줄의 화살표(->) 뒤에 나오는 정보는 디스크 기기 이름을 나타냅니다. 예를 들어 scsi-SQEMU_QEMU_HARDDISK_vm-disk-data -> ../../sdb에서 일련번호는 scsi-SQEMU_QEMU_HARDDISK_vm-disk-data이고 기기 이름은 sdb입니다.

  2. 이 목록에서 디스크 일련번호를 확인합니다.

    일련번호 목록에 영향을 줄 수 있는 중요한 상황별 기능 동작:

    • virtualMachineDiskRef.name 값이 20자(영문 기준)를 초과하면 처음 20자만 일련번호로 사용됩니다.
    • 처음 20자가 동일한 2개의 디스크가 있는 경우 첫 번째 디스크만 일련번호를 가집니다.
  3. 디스크를 포맷합니다.

   sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/disk/by-id/DISK_ID
  • DISK_ID을 포맷할 디스크의 일련번호로 바꿉니다.
  • 이 예시에서는 scsi-SQEMU_QEMU_HARDDISK_vm-disk-data를 지정하여 전체 디스크를 파티션 테이블 없이 포맷합니다.

디스크 성능을 극대화하려면 -E 플래그에 권장되는 포맷 옵션을 사용하세요. 보조 디스크에서 루트 볼륨용 공간을 예약할 필요가 없으므로 -m 0을 지정하여 모든 가용 디스크 공간을 사용하세요.

디스크 마운트

  1. 새 디스크의 마운트 지점 역할을 하는 디렉터리를 만듭니다. 어떤 디렉터리든 사용할 수 있습니다. 다음 예시에서는 /mnt/disks/에 디렉터리를 만듭니다.

    sudo mkdir -p /mnt/disks/MOUNT_DIR
    

    MOUNT_DIR을 디스크를 마운트하려는 디렉터리로 바꿉니다.

  2. 디스크를 인스턴스에 마운트하고 discard 옵션을 사용 설정합니다.

    sudo mount -o discard,defaults /dev/disk/by-id/DISK_ID /mnt/disks/MOUNT_DIR
    

    다음을 바꿉니다.

    • DISK_ID를 마운트할 디스크의 일련번호로 바꿉니다.
    • MOUNT_DIR을 디스크를 마운트할 디렉터리로 바꿉니다.
  3. (선택사항) 디스크에 대한 읽기 및 쓰기 권한을 구성합니다. 다음 명령어는 모든 사용자에게 디스크에 대한 쓰기, a+w 액세스 권한을 부여합니다.

    sudo chmod a+w /mnt/disks/MOUNT_DIR
    
  4. 선택사항: VM 재시작 시 자동 마운트 구성 - 범용 고유 식별자 (UUID) 또는 시작 스크립트 사용

VM 재시작 시 자동 마운트 구성 - 디스크 UUID

VM이 다시 시작될 때 디스크가 자동으로 다시 마운트되도록 /etc/fstab 파일에 디스크를 추가합니다. 운영체제 (OS)에서 기기 이름은 재부팅할 때마다 변경되지만 기기 UUID는 디스크를 시스템 간 이동하는 경우에도 항상 동일한 볼륨을 가리킵니다. 따라서 항상 기기 UUID를 사용하여 VM 재시작 시 자동 마운트를 구성하세요.

  1. 현재 /etc/fstab 파일의 백업을 만듭니다.

      sudo cp /etc/fstab /etc/fstab.backup
    
  2. 디스크의 UUID를 나열합니다.

      sudo blkid /dev/DEVICE_NAME
    

    예시 출력은 디스크의 accc19c5-d0d6-4157-9672-37d4e1d48eb5 UUID를 보여줍니다.

      /dev/sdb: UUID="accc19c5-d0d6-4157-9672-37d4e1d48eb5" TYPE="ext4"
    

    DEVICE_NAME은 자동으로 마운트하려는 디스크의 기기 이름입니다. 디스크에 파티션 테이블을 만든 경우 기기 이름의 서픽스로 마운트할 파티션을 지정합니다. 예를 들어 sdb이 디스크 기기 이름이고 파티션 1을 마운트하려는 경우 DEVICE_NAMEsdb1이 됩니다.

  3. 텍스트 편집기에서 /etc/fstab 파일을 열고 UUID를 포함하는 항목을 만듭니다.

      UUID=UUID_VALUE /mnt/disks/MOUNT_DIR ext4 discard,defaults,MOUNT_OPTION 0 2
    

    다음을 바꿉니다.

    • UUID_VALUE(디스크 UUID 포함)는 UUID 나열 명령어의 출력으로 나열됩니다.
    • MOUNT_DIR을 디스크가 마운트된 디렉터리로 바꿉니다.
    • MOUNT_OPTION(OS의 MOUNT_OPTION 값 사용)는 부팅 시 디스크를 마운트할 수 없는 경우 OS가 수행하는 작업을 지정합니다.
  4. /etc/fstab 항목이 올바른지 확인합니다.

      cat /etc/fstab
    

    다음은 출력 예시를 보여줍니다.

      LABEL=cloudimg-rootfs /    ext4   defaults    0 1
      LABEL=UEFI    /boot/efi   vfat    umask=0077  0 1
      UUID=UUID_VALUE /mnt/disks/MOUNT_DIR ext4 discard,defaults,MOUNT_OPTION 0 2
    

이 디스크를 분리하거나 이 VM의 부팅 디스크로 스냅샷을 만드는 경우 /etc/fstab 파일을 수정하고 이 디스크의 항목을 삭제합니다. MOUNT_OPTIONnofail 또는 nobootwait로 설정한 경우에도 /etc/fstab 파일을 VM에 연결된 기기와 동기화해야 합니다. 부팅 디스크 스냅샷을 만들거나 디스크를 분리하기 전에 이 항목을 삭제합니다.

VM 재시작 시 자동 마운트 구성 - VM 시작 스크립트

디스크 마운트의 명령어를 시작 스크립트에 추가하여 재부팅할 때마다 디스크를 마운트하는 시작 스크립트를 사용할 수도 있습니다. 디스크를 마운트하는 스크립트를 추가하기 전에 디스크 포맷의 명령어를 사용하여 디스크를 포맷합니다.

  1. 시작 스크립트 보안 비밀을 만듭니다.

    cat <<EOF >>mount-disk-script
    #!/bin/bash
    mkdir -p /mnt/disks/MOUNT_DIR
    mount -o discard,defaults /dev/disk/by-id/DISK_ID /mnt/disks/MOUNT_DIR
    EOF
    
    kubectl create secret -n PROJECT generic VM_NAME-mount-script --from-file=script=mount-disk-script
    
    rm mount-disk-script
    
  2. VM에 시작 스크립트를 추가합니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER edit virtualmachines.virtualmachine.gdc.goog -n PROJECT VM_NAME
    

    보안 비밀 이름을 포함하도록 spec.startupScripts을 수정합니다.

    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachine
    metadata:
    name: VM_NAME
    namespace: PROJECT
    spec:
    …
    startupScripts:
    - name: mount-script
      scriptSecretRef:
        name: VM_NAME-mount-script
    

시작 스크립트 구성에 대한 자세한 내용은 참고하세요.