Как происходит взаимодействие с диском как с устройством в Linux?

«Как происходит взаимодействие с диском как с устройством в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Linux, с точки зрения DevOps и системного администрирования, прямое взаимодействие с блочными устройствами (дисками) требуется для задач инициализации, разбиения, мониторинга и восстановления.

Основные концепции и инструменты:

  • Блочные устройства: Диски отображаются как файлы в /dev/ (например, /dev/sda, /dev/nvme0n1). Это интерфейс ядра для raw-доступа.
  • Управление разделами: Используются инструменты fdisk, gdisk или parted.
    # Просмотр информации о диске и разделах
    sudo fdisk -l /dev/sda
  • Файловые системы: Создание ФС на разделе.
    sudo mkfs.ext4 /dev/sda1
  • Мониторинг и диагностика:

    # Проверка SMART-статуса диска
    sudo smartctl -a /dev/sda
    
    # Проверка занятого пространства inode
    df -i
    
    # Просмотр IO-статистики в реальном времени
    sudo iotop

Типичные сценарии в DevOps:

  1. Автоматическое добавление диска в виртуальной машине (с помощью IaC):

    # Terraform для AWS: создание EBS-тома и его attachment к инстансу EC2
    resource "aws_ebs_volume" "data_volume" {
      availability_zone = aws_instance.app.availability_zone
      size              = 100
      type              = "gp3"
    }
    
    resource "aws_volume_attachment" "ebs_att" {
      device_name = "/dev/sdh"
      volume_id   = aws_ebs_volume.data_volume.id
      instance_id = aws_instance.app.id
    }
  2. Автоматизация подготовки диска при bootstrap (например, в cloud-init или Ansible):

    # Ansible playbook для разметки, создания ФС и монтирования
    - name: Create a partition
      community.general.parted:
        device: /dev/sdb
        number: 1
        state: present
        part_end: 100%
    
    - name: Create a filesystem
      filesystem:
        fstype: ext4
        dev: /dev/sdb1
    
    - name: Mount the filesystem
      mount:
        path: /data
        src: /dev/sdb1
        fstype: ext4
        state: mounted
  3. Работа с LVM (Logical Volume Manager) для гибкого управления томами:

    # Создание Physical Volume, Volume Group и Logical Volume
    sudo pvcreate /dev/sdb1
    sudo vgcreate data_vg /dev/sdb1
    sudo lvcreate -L 50G -n data_lv data_vg
    sudo mkfs.ext4 /dev/data_vg/data_lv

Важное предупреждение: Прямые операции с блочными устройствами (dd, fdisk) являются деструктивными и требуют особой осторожности. В автоматизации всегда необходимы проверки существования разделов и idempotency.