배경
웹 개발 환경(Arch 호스트/Debian 게스트)으로 사용할 VirtualBox 인스턴스를 여러 개 만들고 있으며 대부분의 파일을 공유하고 각 시스템에 마운트할 추가 드라이브를 제공하기를 원합니다 /mnt
. 이는 단순히 전체 디스크 메모리를 복제하는 것보다 저렴합니다. , 동일한 프로그램, 파일 등을 사용하는 다른 프로젝트에 다시 설치하지 않고도 시스템 전반에 걸쳐 도구를 설치할 수 있습니다. 두 대의 컴퓨터가 동시에 작동하지 않는다는 한계를 알고 있지만 환경을 자주 전환하지 않으므로 문제가 되지 않습니다.
예를 들어, 각 시스템에서 /etc/hostname
및 /etc/hosts
파일은 각 드라이브의 해당 파일을 가리키는 심볼릭 링크로 대체되고 /mnt
각 프로젝트에 특정한 다른 유용한 디렉터리와 함께 설치됩니다. 이를 통해 동일한 기본 파일 시스템을 사용하면서 다른 프로젝트에 대한 드라이브를 변경할 수 있습니다.
localhost ~ > ls -la /mnt/etc/host*
-rw-r--r-- 1 root root 16 Dec 10 08:04 /mnt/etc/hostname
-rw-r--r-- 1 root root 128 Jan 6 07:20 /mnt/etc/hosts
localhost ~ > ls -la /etc/host*
-rw-r--r-- 1 root root 9 Aug 7 2006 /etc/host.conf
lrwxrwxrwx 1 root root 17 Jan 5 22:36 /etc/hostname -> /mnt/etc/hostname
lrwxrwxrwx 1 root root 14 Jan 5 22:34 /etc/hosts -> /mnt/etc/hosts
-rw-r--r-- 1 root root 411 Dec 9 21:25 /etc/hosts.allow
-rw-r--r-- 1 root root 711 Dec 9 21:25 /etc/hosts.deny
질문과 코드
그러나 내 쉘 프롬프트는 hostname
또는 의 값을 따르지 않고 hosts
기본값은 localhost
. 이러한 파일에는 각 가상 머신마다 다른 호스트 이름 값이 포함되어야 합니다. 그렇지 않으면 작업 중인 머신을 쉽게 잊어버릴 수 있습니다. 파일은 다음과 같습니다.
/mnt/etc/호스트
# Static table lookup for hostnames.
# See hosts(5) for details.
127.0.1.1 mc-development.localdomain mc-development
127.0.0.1 localhost
/mnt/etc/호스트 이름
mc-development
편집 1
출력은 다음과 같습니다 hostnamectl
.
localhost ~ > hostnamectl
Static hostname: mc-development
Transient hostname: localhost
Icon name: computer-vm
Chassis: vm
Machine ID: …
Boot ID: …
Virtualization: oracle
Operating System: Debian GNU/Linux 10 (buster)
Kernel: Linux 4.19.0-13-amd64
Architecture: x86-64
다른 드라이브에 심볼릭 링크한 방식이 호스트 이름 정의 문제의 원인일 수 있다고 생각했지만 이 출력에 따르면 파일을 잘 읽습니다. 그래서 Fish가 존경하는 것 같아요단명호스트 이름을 표시하고 싶을 때변화 없는CPU 이름.
이 작업을 수행하는 방법에 대한 아이디어가 있습니까? 이 두 호스트 이름 유형의 주요 차이점은 무엇입니까?
그건 그렇고, 이것은 Bash에서도 발생합니다.
localhost ~ > bash
matt@localhost:~$
내가 시도한 것
드라이브가 설치되는 순서가 다를 수 있다고 생각합니다. OS가 아직 로드되지 않은 파일에 대한 링크를 읽는 경우 이와 같은 문제가 발생할 수 있기 때문입니다. 그러나 항목 순서를 변경해도 fstab
도움이 되지 않습니다.
편집 2
Ljm Dullaart의 답변에 대한 의견에서 언급했듯이 /usr
디렉토리 복사가 작동하지 않는 것 같습니다. 내 Debian 상자 는 시작 /bin
시 ./sbin
/bin/init
내가 취한 단계는 다음과 같습니다.
1. 라이브 이미지로 부팅하고 게스트 내에서 공유되는 드라이브를 마운트합니다.
# mount /dev/sda1 /mnt
# mount /dev/sdb1 /mnt/mnt
2. 전체 usr
디렉터리를 공유 드라이브로 이동합니다.
# mv /mnt/usr /mnt/mnt
3. 심볼릭 링크를 생성합니다.
# ln -s /mnt/mnt/usr /mnt/usr
4. 시작하고 나서...
답변1
아니요, 권장되지 않습니다.
일반적으로 공유할 수 있는 파일 시스템은 많지만(일부는 읽기 전용임) 루트 파일 시스템은 그중 하나가 아닙니다. 이 파일 시스템은 시스템 부팅 프로세스에서 사용됩니다.
귀하의 경우에는 rootfs에서 각 시스템을 분리할 수 있는 /usr
가능성을 공유하겠습니다 /opt
(크기는 내 시스템에 있으며 메모리 사용량에 대한 아이디어를 제공하기 위한 것임).
15M bin
94M boot
34M etc
778M lib
28M lib64
각 기계를 분리할 수도 있습니다.
4.9G var
여기에 로그가 저장되기 때문입니다. 이런 방식으로 인스턴스의 로깅을 혼합하면 안 됩니다.
넌 계속 공유할 거야
22G usr
4.7G opt
426G home
~에 따르면편집 2_
귀하가 만든 이 링크는 작동하지 않습니다. 당신은 /usr
우리를 계속 /dev/sda1
가리키고 있습니다 /mnt/mnt/usr
. /usr
sdb1이 아니라 /mnt/mnt/usr
.
그러나 더 많은 작업을 수행했지만 /sbin
여전히 rootfs에 있어야 합니다. 존재하지 않는다는 사실은 잘못된 것입니다.
당신이 해야 할 일은 정확히 동일한 설치 미디어와 동일한 옵션을 사용하여 두 컴퓨터를 모두 다시 설치하는 것입니다(죄송합니다).
기계 1:
파티션 편집기가 나타나면 아래와 같이 파티션을 선택합니다.
/dev/sda1
: 루트 파일 시스템(/
)/dev/sdb1
:/usr
/dev/sdb2
:/home
/dev/sdb3
:/opt
그런 다음 배치를 설치합니다.
머신 1이 가동되면 종료합니다.
다음으로, 머신 2의 경우: 정확히 동일합니다. sda가 자체 디스크이고 sdb가 공유 디스크인지 확인하세요.
업그레이드 및 업데이트는 PITA이지만 가상 환경이므로 때때로 다시 설치하도록 선택할 수 있습니다.
____ 다른 편집자 _____
Debian을 사용하므로 systemd
설명된 방법은 더 이상 가능하지 않습니다. 바라보다 https://fedoraproject.org/wiki/Features/UsrMove이유를 설명하세요. (Fedora, 그러나 모든 systemd-distro에서 작동함)