Score:0

ติดตั้งฮาร์ดดิสก์เสมือน Azure บนระบบไฟล์ระหว่างการสร้าง Azure Linux VM โดยใช้ Terraform

ธง cf

ฉันใช้ Terraform เพื่อสร้าง VM อัตโนมัติบน Microsoft Azure สคริปต์ Terraform จะยอมรับการกำหนดค่าดิสก์ข้อมูลดังต่อไปนี้ (อ้างอิง data_disk_size_gb) สร้างฮาร์ดดิสก์เสมือนและต่อเชื่อมในเส้นทางระบบไฟล์ที่กำหนด

โมดูล "jumphost" {
    นับ = 1
    แหล่งที่มา = "../modules/services/jumphost"
    คำนำหน้า = "${module.global-vars.project}-${var.environment}"
    rg = azurerm_resource_group.rg
    vm_size = "มาตรฐาน_D2s_v4"
    เครือข่ายย่อย = azurerm_subnet.web-subnet
    private_ip_address = "10.0.1.250"
    data_disk_size_gb = [ 
        ["/ข้อมูล", 100],
        ["/data2" , 200]
    ]
    admin_username = "zaidwaqi"
    admin_public_key_path = "../id_rsa.pub"
    nsg_allow_tcp_ports = [22]
    public_ip_address = จริง
}

การสร้างฮาร์ดดิสก์เสมือนและไฟล์แนบกับ VM ทำได้ดังนี้ ซึ่งฉันเชื่อว่าทำงานได้ดีและไม่ใช่สาเหตุของปัญหา

ทรัพยากร "azurerm_managed_disk" "ดิสก์ข้อมูล" {
    นับ = ความยาว (var.data_disk_size_gb)
    name = "${var.prefix}-${var.service_name}-data-disk-${count.index}"
    สถานที่ = var.rg.location
    resource_group_name = var.rg.name
    storage_account_type = "Standard_LRS"
    create_option = "ว่าง"
    disk_size_gb = var.data_disk_size_gb[count.index][1]
}

ทรัพยากร "azurerm_virtual_machine_data_disk_attachment" "ภายนอก" {
    นับ = ความยาว (azurerm_managed_disk.data-disk)
    Managed_disk_id = "${azurerm_managed_disk.data-disk[count.index].id}"  
    virtual_machine_id = azurerm_linux_virtual_machine.vm.id  
    lun = "${count.index + 10}"  
    แคช = "อ่านเขียน"  
}

เพื่อใช้ดิสก์ข้อมูลที่จัดเตรียมไว้ การกำหนดค่า cloud-init มีไว้เพื่อจัดการการแบ่งพาร์ติชัน การสร้างและการติดตั้งระบบไฟล์ ข้อมูลดังกล่าวจัดทำโดย Terraform config ผ่าน data template_cloudinit_configซึ่งจะส่งผ่านไปยัง VM custom_data คุณลักษณะ

ข้อมูล " template_cloudinit_config" "config" {
  gzip = จริง
  base64_encode = จริง
  ส่วนหนึ่ง {
      ชื่อไฟล์ = "init-cloud-config"
      content_type = "ข้อความ/cloud-config"
      เนื้อหา = ไฟล์ ("../modules/services/${var.service_name}/init.yaml")
  }
  ส่วนหนึ่ง {
      ชื่อไฟล์ = "init-shellscript"
      content_type = "ข้อความ/x-shellscript"
      เนื้อหา = templatefile ("../modules/services/${var.service_name}/init.sh",
        { 
          ชื่อโฮสต์ = "${var.prefix}-${var.service_name}"
          data_disk_size_gb = var.data_disk_size_gb
        }
      )
  }
}

เชลล์สคริปต์ cloud-init init.sh ที่รับค่าพารามิเตอร์ได้ดังนี้

#!/bin/bash

hostnamectl ตั้งค่าชื่อโฮสต์ ${ชื่อโฮสต์}

%{ สำหรับดัชนี ดิสก์ใน data_disk_size_gb ~}
แยกส่วน /dev/sd${ split("","bcdef")[index] } --script mklabel gpt mkpart xfspart xfs 0% 100%
mkfs.xfs /dev/sd${ แยก("","bcdef")[ดัชนี] }1
partprobe /dev/sd${ split("","bcdef")[ดัชนี] }1
mkdir -p ${ ดิสก์[0] }
เมานต์ /dev/sd${ split("","bcdef")[index] }1 ${ ดิสก์[0] }
echo UUID=\"`(blkid /dev/sd${ split("","bcdef")[index] }1 -s UUID -o value)`\" ${ disk[0] } ค่าเริ่มต้น xfs,nofail 1 2 >> /etc/fstab
%{ ปลายทาง ~}

เมื่อเสร็จสิ้น ใช้พื้นผิว, /ข้อมูล และ /data2 ไม่ปรากฏให้เห็นใน ดีเอฟ เอาต์พุต ฉันคาดว่าจะเห็นรายการสำหรับ /dev/sdb1 และ /dev/sdc1 ด้วยจุดยึดของ /ข้อมูล และ /data2 ตามลำดับ

[zaidwaqi@starter-stage-jumphost ~]$ ls /
bin boot dev ฯลฯ home lib lib64 สื่อ mnt opt ​​proc root run sbin srv sys tmp usr var
[zaidwaqi@starter-stage-jumphost ~]$ df -h
ขนาดระบบไฟล์ที่ใช้ Avail Use% Mounted on
devtmpfs 3.9G 0 3.9G 0% /การพัฒนา
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 8.6M 3.9G 1% /รัน
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda2 30G 1.8G 28G 7% /
/dev/sda1 496M 73M 424M 15% /บูต
/dev/sda15 495M 6.9M 488M 2% /บูต/efi
tmpfs 798M 0 798M 0% /รัน/ผู้ใช้/1000

ข้อมูลการวินิจฉัย

/var/lib/cloud/instance/scripts/

#!/bin/bash

hostnamectl ตั้งค่าชื่อโฮสต์ starter-stage-jumphost

แยกส่วน /dev/sdb --script mklabel gpt mkpart xfspart xfs 0% 100%
mkfs.xfs /dev/sdb1
ส่วนโพรบ /dev/sdb1
mkdir -p /ข้อมูล
เมานต์ /dev/sdb1 /data
echo UUID=\"`(blkid /dev/sdb1 -s UUID -o value)`\" /data xfs defaults,nofail 1 2 >> /etc/fstab 
แยกส่วน /dev/sdc --script mklabel gpt mkpart xfspart xfs 0% 100%
mkfs.xfs /dev/sdc1
ส่วนโพรบ /dev/sdc1
mkdir -p /data2
เมานต์ /dev/sdc1 /data2
echo UUID=\"`(blkid /dev/sdc1 -s UUID -o value)`\" /data2 xfs defaults,nofail 1 2 >> /etc/fstab
[สคริปต์ zaidwaqi@starter-stage-jumphost]$ 

/var/log/cloud-init.log

เนื้อหาบางส่วนของบันทึก หวังว่าฉันจะแสดงส่วนที่เกี่ยวข้องด้านล่าง

2021-07-03 05:42:43,635 - cc_disk_setup.py[DEBUG]: การสร้างตาราง/ดิสก์พาร์ติชันใหม่
2021-07-03 05:42:43,635 - util.py[DEBUG]: เรียกใช้คำสั่ง ['udevadm', 'settle'] พร้อมรหัสส่งคืนที่อนุญาต [0] (shell=False, capture=True)
2021-07-03 05:42:43,651 - util.py[DEBUG]: การสร้างพาร์ติชันบน /dev/disk/cloud/azure_resource ใช้เวลา 0.016 วินาที
2021-07-03 05:42:43,651 - util.py[คำเตือน]: การดำเนินการแบ่งพาร์ติชันล้มเหลว
ไม่มีอุปกรณ์ /dev/disk/cloud/azure_resource และไม่ได้สร้างด้วย udevadm set
2021-07-03 05:42:43,651 - util.py[DEBUG]: การดำเนินการแบ่งพาร์ติชันล้มเหลว
ไม่มีอุปกรณ์ /dev/disk/cloud/azure_resource และไม่ได้สร้างด้วย udevadm set
Traceback (การโทรครั้งล่าสุดล่าสุด):
  ไฟล์ "/usr/lib/python3.6/site-packages/cloudinit/config/cc_disk_setup.py", บรรทัด 140, ในแฮนเดิล
    func=mkpart, args=(ดิสก์, คำจำกัดความ))
  ไฟล์ "/usr/lib/python3.6/site-packages/cloudinit/util.py", บรรทัด 2539 ใน log_time
    ret = func(*args, **kwargs)
  ไฟล์ "/usr/lib/python3.6/site-packages/cloudinit/config/cc_disk_setup.py", บรรทัด 769 ใน mkpart
    assert_and_settle_device(อุปกรณ์)
  ไฟล์ "/usr/lib/python3.6/site-packages/cloudinit/config/cc_disk_setup.py", บรรทัด 746 ใน assert_and_settle_device
    "ด้วยการชำระ udevadm" % อุปกรณ์)
RuntimeError: ไม่มีอุปกรณ์ /dev/disk/cloud/azure_resource และไม่ได้สร้างด้วย udevadm set
2021-07-03 05:42:43,672 - cc_disk_setup.py[DEBUG]: การตั้งค่าระบบไฟล์: [{'ระบบไฟล์': 'ext4', 'อุปกรณ์': 'ephemeral0.1'}]
2021-07-03 05:42:43,672 - cc_disk_setup.py[DEBUG]: ephemeral0.1 ถูกแมปกับ disk=/dev/disk/cloud/azure_resource part=1
2021-07-03 05:42:43,672 - cc_disk_setup.py[DEBUG]: การสร้างระบบไฟล์ใหม่
2021-07-03 05:42:43,672 - util.py[DEBUG]: เรียกใช้คำสั่ง ['udevadm', 'settle'] พร้อมรหัสส่งคืนที่อนุญาต [0] (shell=False, capture=True)
2021-07-03 05:42:43,684 - util.py[DEBUG]: การสร้าง fs สำหรับ /dev/disk/cloud/azure_resource ใช้เวลา 0.012 วินาที
2021-07-03 05:42:43,684 - util.py[คำเตือน]: ล้มเหลวระหว่างการทำงานของระบบไฟล์
ไม่มีอุปกรณ์ /dev/disk/cloud/azure_resource และไม่ได้สร้างด้วย udevadm set
2021-07-03 05:42:43,684 - util.py[DEBUG]: ล้มเหลวระหว่างการทำงานของระบบไฟล์
ไม่มีอุปกรณ์ /dev/disk/cloud/azure_resource และไม่ได้สร้างด้วย udevadm set
Traceback (การโทรครั้งล่าสุดล่าสุด):
  ไฟล์ "/usr/lib/python3.6/site-packages/cloudinit/config/cc_disk_setup.py", บรรทัด 158, ในแฮนเดิล
    func=mkfs, args=(คำนิยาม,))
  ไฟล์ "/usr/lib/python3.6/site-packages/cloudinit/util.py", บรรทัด 2539 ใน log_time
    ret = func(*args, **kwargs)
  ไฟล์ "/usr/lib/python3.6/site-packages/cloudinit/config/cc_disk_setup.py", บรรทัด 871 ใน mkfs
    assert_and_settle_device(อุปกรณ์)
  ไฟล์ "/usr/lib/python3.6/site-packages/cloudinit/config/cc_disk_setup.py", บรรทัด 746 ใน assert_and_settle_device
    "ด้วยการชำระ udevadm" % อุปกรณ์)
RuntimeError: ไม่มีอุปกรณ์ /dev/disk/cloud/azure_resource และไม่ได้สร้างด้วย udevadm set
2021-07-03 05:42:43,684 - handlers.py[DEBUG]: เสร็จสิ้น: init-network/config-disk_setup: สำเร็จ: config-disk_setup ทำงานสำเร็จ
2021-07-03 05:42:43,685 - stages.py[DEBUG]: การเรียกใช้โมดูลเมานต์ (<โมดูล 'cloudinit.config.cc_mounts' จาก '/usr/lib/python3.6/site-packages/cloudinit/config/ cc_mounts.py'>) ที่มีความถี่ 1 ครั้งต่ออินสแตนซ์
2021-07-03 05:42:43,685 - handlers.py[DEBUG]: start: init-network/config-mounts: เรียกใช้ config-mounts ด้วยความถี่หนึ่งครั้งต่ออินสแตนซ์
2021-07-03 05:42:43,685 - util.py[DEBUG]: กำลังเขียนถึง /var/lib/cloud/instances/b7e003ce-7ad3-4840-a4f7-06faefed9cb0/sem/config_mounts - wb: [644] 24 ไบต์

/var/log/cloud-init-output.log

เนื้อหาบางส่วนของบันทึก หวังว่าฉันจะแสดงส่วนที่เกี่ยวข้องด้านล่าง

สมบูรณ์!
Cloud-init v. 19.4 ที่รัน 'modules:config' เมื่อวันเสาร์ 03 กรกฎาคม 2021 05:42:46 +0000 เพิ่มขึ้น 2268.33 วินาที
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=6553472 blks
         = sectsz=4096 attr=2, projid32bit=1
         = crc=1 finobt=1, กระจัดกระจาย=1, rmapbt=0
         = อ้างอิง = 1
ข้อมูล = bsize=4096 บล็อก=26213888, imaxpct=25
         = sunit=0 ความกว้าง=0 blks
การตั้งชื่อ = เวอร์ชัน 2 bsize=4096 ascii-ci=0, ftype=1
บันทึก =บันทึกภายใน bsize=4096 บล็อก=12799 เวอร์ชัน=2
         = sectsz=4096 sunit=1 blks, lazy-count=1
เรียลไทม์ =ไม่มี extsz=4096 บล็อก=0, rtextents=0
meta-data=/dev/sdc1 isize=512 agcount=4, agsize=13107072 blks
         = sectsz=4096 attr=2, projid32bit=1
         = crc=1 finobt=1, กระจัดกระจาย=1, rmapbt=0
         = อ้างอิง = 1
ข้อมูล = bsize=4096 บล็อก=52428288, imaxpct=25
         = sunit=0 ความกว้าง=0 blks
การตั้งชื่อ = เวอร์ชัน 2 bsize=4096 ascii-ci=0, ftype=1
บันทึก =บันทึกภายใน bsize=4096 บล็อก=25599 เวอร์ชัน=2
         = sectsz=4096 sunit=1 blks, lazy-count=1
เรียลไทม์ =ไม่มี extsz=4096 บล็อก=0, rtextents=0
Cloud-init v. 19.4 กำลังเรียกใช้ 'โมดูล: สุดท้าย' เมื่อวันเสาร์ที่ 3 กรกฎาคม 2021 05:45:28 +0000 เพิ่มขึ้น 2430.85 วินาที
Cloud-init v. 19.4 เสร็จสิ้นเมื่อวันเสาร์ที่ 03 กรกฎาคม 2021 05:45:34 +0000 แหล่งข้อมูล DataSourceAzure [seed=/dev/sr0] เพิ่มขึ้น 2436.88 วินาที
cf flag
การอ่านครั้งต่อไปของฉันเกี่ยวกับสิ่งนี้แนะนำว่าเป็นเพราะดิสก์ข้อมูลไม่สามารถแนบกับ azure_linux_virtual_machine ได้ในขณะสร้าง https://github.com/terraform-providers/terraform-provider-azurerm/issues/6117

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา