multipass nfs

multipassのディレクトリ共有をnfsに変更

Multipass の mount を sshfs から nfs へ変更

理由

  • ssh ログイン後 特定のディレクトリでレスポンスが悪い 。 ls pwd などでも 1分かかる場合がある。

  • .gitディレクトリのあるディレクトリでこの事象が起こる。
    全てではない。 原因不明

ということで 以前の Vagrant + vmware のレスポンスがほしいため mount の方法を変える。

multipass デフォルトは sshfs で接続する。
multipass の mount のコマンドは使わない。

振る舞い

—cloud-init で nfs-common

これをインストールしないと nfs の mount ができない。

packages:
  - nfs-common

作成された VM の IP から /etc/exports/へ追記

sudo sed -i "" "/${vm_ip}/d" /etc/exports
sudo sh -c "echo '${MOUNT_WORKSPACE_HOST} alldirs -mapall=${USER_ID}:${GROUP_ID}  ${vm_ip}' >> /etc/exports"

multipass exec コマンドで mount ディレクトリ作成

multipass exec ${VM_NAME} -- mkdir ${MOUNT_WORKSPACE_VM}

multipass exec コマンドで /etc/fstab へ追記、マウント

multipass exec ${VM_NAME} -- sudo sh -c "echo '${NFS_HOST_IP}:/${MOUNT_WORKSPACE_HOST} ${MOUNT_WORKSPACE_VM} nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0' >> /etc/fstab"
multipass exec ${VM_NAME} -- sudo sh -c "mount ${NFS_HOST_IP}:/${MOUNT_WORKSPACE_HOST} ${MOUNT_WORKSPACE_VM}"

multipass vm 作成スクリプト

#!/usr/bin/env bash

echo -e -n "\n"
echo "###################################"
echo "###       cloud-config          ###"
echo "###################################"
AUTHORIZED_KEYS_ID_RSA=$(cat "$RSA_PUB_FILE_NAME")
AUTHORIZED_KEYS_ANSIBLE_RSA=$(cat "$ANSIBLE_RSA_PUB_FILE_NAME")
cat >./cloud-config.yaml <<_EOF_
---
locale: en_US.UTF8
timezone: Asia/Tokyo
packages:
  - nfs-common
users:
  - name: ubuntu
    ssh-authorized-keys:
      - ${AUTHORIZED_KEYS_ID_RSA}
      - ${AUTHORIZED_KEYS_ANSIBLE_RSA}
_EOF_
cat ./cloud-config.yaml

echo -e -n "\n"
echo "###################################"
echo "###         Create VM           ###"
echo "###################################"
multipass launch -c "${CPU}" -m "${MEMORY}" -d "${DISK_SIZE}" -n "${VM_NAME}" "${VM_VERSION}" --cloud-init "${CLOUD_INIT}"
sleep 30

#echo -e -n "\n"
#echo "###################################"
#echo "###        Mount Dir            ###"
#echo "###################################"
#multipass mount "${MOUNT_WORKSPACE_HOST}" "${VM_NAME}":"${MOUNT_WORKSPACE_VM}"
#echo "mount ${MOUNT_WORKSPACE_HOST} ${VM_NAME}:${MOUNT_WORKSPACE_VM}"

echo -e -n "\n"
echo "###################################"
echo "###      VM IP address          ###"
echo "###################################"
vm_ip=$(multipass info develop | grep IPv4 | awk '{ print $2 }')
echo "ipv4 : ${vm_ip}"

echo -e -n "\n"
echo "###################################"
echo "###  Create ansible inventory   ###"
echo "###################################"
cat >./hosts/multipass <<_EOF_
[multipass]
multipass ansible_host=$vm_ip ansible_user=ubuntu ansible_ssh_private_key_file=$RSA_FILE_NAME ansible_ssh_common_args='-o StrictHostKeyChecking=no'

[ubuntu20]
multipass
_EOF_
cat ./hosts/multipass

echo -e -n "\n"


echo -e -n "\n"
echo "###################################"
echo "###           NFS               ###"
echo "###################################"


sudo sed -i "" "/${vm_ip}/d" /etc/exports
sudo sh -c "echo '${MOUNT_WORKSPACE_HOST} alldirs -mapall=${USER_ID}:${GROUP_ID}  ${vm_ip}' >> /etc/exports"
multipass exec ${VM_NAME} -- mkdir ${MOUNT_WORKSPACE_VM}
multipass exec ${VM_NAME} -- sudo sh -c "echo '${NFS_HOST_IP}:/${MOUNT_WORKSPACE_HOST} ${MOUNT_WORKSPACE_VM} nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0' >> /etc/fstab"
multipass exec ${VM_NAME} -- sudo sh -c "mount ${NFS_HOST_IP}:/${MOUNT_WORKSPACE_HOST} ${MOUNT_WORKSPACE_VM}"

echo "###################################"
echo "###   Exec ansible playbook     ###"
echo "###################################"

echo "$DEVELOP_INIT"
if [ "$DEVELOP_INIT" == 'true' ]; then
 ansible-playbook -i hosts/multipass site.yml -l multipass
# ansible-playbook -i hosts/multipass site.yml -l multipass -t tests
else
 ansible-playbook -i hosts/multipass site.yml -l multipass --skip-tags develop_init
fi

sshfs から nfs に変更しての結果

上記の症状は全くなし。通常のターミナル操作もレスポンスが早くなった気がする。
デフォルトで nfs 接続だったらいいのに・・・


おっさんWEBエンジニア奮闘記©2007 WEBDIMENSION