Как настроить Raspberry Pi для загрузки с помощью корня NFS?

Как я могу заставить мой малиновый Pi использовать NFS-сервер для корневой файловой системы вместо SD-карты?

Я хотел бы настроить мою малиновую Pi, чтобы иметь свою корневую файловую систему на удаленной машине через NFS для целей производительности /резервного копирования /разработки. Как я могу это сделать?

23 голоса | спросил Flexo 23 J0000006Europe/Moscow 2012, 16:53:07

1 ответ


22

Краткая версия

  1. Вам нужно подготовить корневой каталог и экспортировать его с компьютера NFS.
  2. Вам необходимо настроить загрузку на ранней стадии, чтобы использовать

Вам все равно потребуется SD-карта для начальной загрузки, но после этого ничего, кроме /boot, не потребуется SD-карта.

Подробнее

Я только сделал это на машине Linux. Теоретически на любой машине можно экспортировать файловые системы NFS.

  1. Самый простой способ подготовить корневую файловую систему - скопировать файл, предоставленный существующими изображениями. Я использовал официальное изображение Debian 6 в качестве отправной точки:

    1. Загрузите изображение, извлеките .zip-файл. Теперь у вас должно быть debian6-19-04-2012.img
    2. Смонтируйте корневой раздел с этого образа с помощью устройства loopback. Вам понадобится смещение в изображении для начала корневого раздела, в этом случае это второй раздел изображения:

      fdisk -l debian6-19-04-2012.img
      
      Диск debian6-19-04-2012.img: 1949 МБ, 1949999616 байт
      4 головки, 32 сектора /дорожка, 29754 цилиндра, всего 3808593 секторов
      Единицы = секторы 1 * 512 = 512 байт
      Размер сектора (логический /физический): 512 байт /512 байт
      Размер ввода /вывода (минимальный /оптимальный): 512 байт /512 байт
      Идентификатор диска: 0x000ee283
      
      
      Начальная команда загрузки устройства
      debian6-19-04-2012.img1 2048 155647 76800 c W95 FAT32 (LBA)
      debian6-19-04-2012.img2 157696 3414015 1628160 83 Linux
      debian6-19-04-2012.img3 3416064 3807231 195584 82 Linux swap /Solaris
      корень @ Рапунцель: /TMP /debian6-19-04-2012 #
      

      Второй раздел начинается с блока (или сектора) 157696, поэтому смещение равно (512 * 157696) = 80740352:

      root @ rapunzel: /tmp /debian6-19-04-2012 # mkdir /mnt /pi-root-loop
      root @ rapunzel: /tmp /debian6-19-04-2012 # mount -o loop, offset = 80740352 /tmp/debian6-19-04-2012/debian6-19-04-2012.img /mnt /pi-root- петля
      root @ rapunzel: /tmp /debian6-19-04-2012 # ls /mnt /pi-root-loop
      bin Desktop и т. д. lib mnt proc sbin selinux sys usr
      boot dev home media opt root sd srv tmp var
      корень @ Рапунцель: /TMP /debian6-19-04-2012 #
      
    3. С установленным изображением вы, вероятно, захотите скопировать это место где-то более постоянным, чтобы навсегда избежать использования loopback-устройства. Я сделал том LVM2 и установил его в /mnt /rpi-root, поэтому я сделал:

      cp -rav /mnt /pi-root-loop /* /mnt /rpi-root /
      
    4. Нам нужно экспортировать файловую систему сейчас, поэтому нам нужно добавить строку, например:

      /mnt /rpi-root 192.168.1.2 (rw, no_root_squash)
      

      в /etc /exports на сервере NFS, где 192.168.1.2 является адресом малины Pi. После добавления этого запуска exportfs -rv, чтобы перечитать список экспорта. (См. экспорт (5) для более сложных опций, включая подстановочные знаки /подсети, а не отдельные хосты)

    Вы также можете пропустить этот шаг и создать корневую файловую систему с нуля, используя что-то вроде multistrap .

  2. Теперь нам нужно создать SD-карту, которая делает загрузку и загрузку на ранней стадии, используя этот общий ресурс NFS. Я сделал это, взяв первый раздел официального изображения и скопировав его на SD-карту, где SD-карта - /dev /sdx:

    dd if = /tmp /debian6-19-04-2012 /debian6-19-04-2012.img of = /dev /sdx bs = 512 count = 155647
    

    , а затем, поскольку это только скопировал первый раздел, редактируя таблицу разделов с помощью fdisk, чтобы удалить два раздела, которые мы не копировали.

    После этого я смонтировал раздел с SD-карты и отредактировал файл cmdline.txt, чтобы прочитать:

    dwc_otg.lpm_enable = 0 console = ttyAMA0,115200 kgdboc = ttyAMA0,115200 console = tty1 root = /dev /nfs nfsroot = 192.168.1.1: /mnt /rpi-root ip = dhcp rootfstype = nfs
    

    , где192.168.1.1 - адрес сервера NFS. Если вы не хотите использовать DHCP, вы можете установить альтернативные способы IP-адреса, см. этот документ для более подробной информации.

    Как только это будет сделано, вы можете размонтировать SD-карту и загрузить свой Rapsberry Pi с корнем NFS. Вы также можете манипулировать файловой системой со стороны сервера или другими клиентами NFS по своему усмотрению (например, QEMU + binfmt_misc , моментальные снимки LVM, системы резервного копирования и т. д.)

Дополнительные вещи

  • Настройка RAMRUN и RAMLOCK на yes в /etc /default /rcS вызывает /var /run и /var /lock соответственно для установки как tmpfs (например, ramdisk) - это, вероятно, стоит, даже если у вас есть только одно устройство загрузка из файловой системы NFS.
  • Если вы используете ip = dhcp, вам, вероятно, потребуется прокомментировать строку:

    #iface eth0 inet dhcp
    

    в /etc /network /interfaces (/mnt /rpi-root /etc /network /interfaces), чтобы избежать ситуации, когда обмен между ранним загрузочным DHCP и обычным более поздним вызывает сообщение типа:

      

    nfs: сервер 192.168.1.1 не отвечает, все еще пытается

  • Если вы хотите загружать множество устройств из одного и того же корня, вам нужно позаботиться о предоставлении «local» /tmp (возможно, tmpfs) и других тонкостей, чтобы избежать проблем с несколькими машинами, пытающимися записать те же файлы.

ответил Flexo 23 J0000006Europe/Moscow 2012, 16:53:07

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132