영어프랑스어스페인어

Ad


온웍스 파비콘

guestfs-faq - 클라우드의 온라인

Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터를 통해 OnWorks 무료 호스팅 제공업체에서 guestfs-faq 실행

이것은 Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 공급자에서 실행할 수 있는 guestfs-faq 명령입니다.

프로그램:

이름


guestfs-faq - libguestfs 자주 묻는 질문(FAQ)

브랜드 이야기 LIBGUESTFS


is libguestfs?
libguestfs는 디스크 이미지를 생성, 액세스 및 수정하는 방법입니다. 디스크 내부를 볼 수 있습니다
이미지, 포함된 파일 수정, 처음부터 생성, 크기 조정 등
더. 스크립트와 프로그램, 명령줄에서 특히 유용합니다.

libguestfs는 C 라이브러리(따라서 "lib-")이며 이 라이브러리에 구축된 도구 집합입니다.
많은 공통 프로그래밍 언어에 대한 바인딩.

libguestfs가 무엇을 할 수 있는지에 대한 자세한 내용은 홈 페이지의 소개를 참조하십시오.
(http://libguestfs.org).

are 전에, 미덕 도구?
Virt 도구(웹사이트: http://virt-tools.org) 가상화 관리의 전체 집합입니다.
시스템 관리자를 대상으로 하는 도구. 그들 중 일부는 libguestfs에서, 일부는
libvirt 및 다른 오픈 소스 프로젝트의 많은 다른 사람들. 따라서 virt 도구는 다음의 상위 집합입니다.
libguestfs. 그러나 libguestfs에는 많은 중요한 도구가 있습니다. 보다
http://libguestfs.org 전체 목록.

가요 libguestfs 필요한 것 { libvirt / KVM / 빨간색 모자 / 페도라 }?
안돼!

libvirt는 libguestfs에 대한 요구 사항이 아닙니다.

libguestfs는 VMware, KVM, qemu,
VirtualBox, Xen 및 기타 여러 하이퍼바이저와 처음부터 생성한 하이퍼바이저.

Red Hat은 libguestfs 및 기타 수많은 개방형 개발을 후원(예: 비용을 지불)합니다.
소스 프로젝트. 그러나 다양한 Linux에서 libguestfs 및 virt 도구를 실행할 수 있습니다.
배포판 및 Mac OS X. 모든 Linux 배포판을 최고 수준으로 지원하기 위해 최선을 다합니다.
시민. 일부 virt 도구는 Windows로 이식되었습니다.

방법 하지 libguestfs 비교 other 도구?
kpartx
Libguestfs는 kpartx와 다른 접근 방식을 취합니다. kpartx는 루트가 필요하고 마운트가 필요합니다.
호스트 커널의 파일 시스템(안전하지 않을 수 있음 - 참조 guestfs 보안(삼)).
Libguestfs는 게스트로부터 호스트 커널을 분리하고 더 유연하고 스크립트 가능하며,
LVM을 지원하고, 루트가 필요하지 않으며, 다른 프로세스와 격리되고 정리됩니다.
자체 후. Libguestfs는 파일 액세스 그 이상입니다.
처음부터 이미지를 만듭니다.

vdfuse
vdfuse는 kpartx와 비슷하지만 VirtualBox 이미지용입니다. 위의 kpartx 비교를 참조하십시오.
vdfuse에 의해 노출된 파티션 파일에 libguestfs를 사용할 수 있습니다.
libguestfs가 VirtualBox 이미지에 직접 액세스할 수 있기 때문에 필요합니다.

qemu-nbd
NBD(Network Block Device)는 네트워크를 통해 블록 장치를 내보내기 위한 프로토콜입니다.
qemu-nbd는 qemu에서 지원하는 모든 디스크 형식(예: raw,
qcow2). libguestfs와 qemu-nbd 또는 nbdkit을 함께 사용하여 블록에 액세스할 수 있습니다.
네트워크를 통한 장치(예: "guestfish -a nbd://remote")

설치 파일 시스템 in 전에, 주인
호스트에 게스트 파일 시스템을 마운트하는 것은 안전하지 않으므로 완전히 피해야 합니다.
신뢰할 수 없는 손님을 위해. libguestfs를 사용하여
파일 시스템 익스플로잇. 또한보십시오 게스트 마운트(1).

나뉜
Libguestfs는 LVM을 지원합니다. Libguestfs는 parted를 사용하고 대부분의 parted 기능을 제공합니다.
libguestfs API를 통해

시작하기 도움 보고 버그


방법 do I 알고있다 버전 나는 해요 사용?
가장 간단한 방법은 다음과 같습니다.

guestfish --버전

Libguestfs 개발은 불안정한 분기를 따라 발생하며 주기적으로
안정적인 패치를 백포트하는 안정적인 분기. 자세한 내용은 "LIBGUESTFS
버전 번호" 손님(3).

방법 I 얻을 도움말?
메일 링 목록 or 잡담 ROOMS are 유효한?
Red Hat Enterprise Linux를 사용하는 Red Hat 고객인 경우 다음으로 문의하십시오.
레드햇 지원: http://redhat.com/support

주로 개발을 위한 메일링 리스트가 있지만 사용자는 다음을 요청할 수도 있습니다.
libguestfs 및 virt 도구에 대한 질문:
https://www.redhat.com/mailman/listinfo/libguestfs

FreeNode의 IRC 채널 "#libguestfs"에서 우리와 이야기할 수도 있습니다. 우리는 항상
주변에 질문을 한 후 채널에 머무르십시오. 그러면 누군가가 돌아올 것입니다.
당신에게.

다른 virt 도구(libguestfs와 함께 제공되지 않음)의 경우 일반 virt 도구가 있습니다.
메일링 리스트: https://www.redhat.com/mailman/listinfo/virt-tools-list

방법 do I 신고 버그?
다음 링크를 사용하여 Bugzilla에 버그를 입력하세요.

https://bugzilla.redhat.com/enter_bug.cgi?component=libguestfs&product=Virtualization+Tools

가능한 한 많은 세부 사항과 문제를 재현하는 방법을 포함하십시오.

의 전체 출력을 포함합니다. libguestfs-테스트-도구(1).

공통 문제


"LIBGUESTFS GOTCHAS"도 참조하십시오. 손님(3) libguestfs를 사용하는 일부 "문제"의 경우
API.

"할 수 있었다 지원 할당 동적 역자 완충기"
이 모호한 오류는 실제로 SELinux 오류입니다. 다음을 활성화해야 합니다.
SELinux 부울:

setsebool -P virt_use_execmem=on

자세한 내용은 https://bugzilla.redhat.com/show_bug.cgi?id=806106을 참조하십시오.

"아이 방법 사망 뜻밖에"
[이 오류 메시지는 libguestfs 1.21.18에서 더 설명적인 것으로 변경되었습니다.]

이 오류는 qemu가 실패했거나 호스트 커널을 부팅할 수 없음을 나타냅니다. 더 나아가려면
실패에 대한 정보를 보려면 다음을 실행해야 합니다.

libguestfs-테스트-도구

이것을 사용한 후에도 여전히 실패를 이해하지 못하는 경우 당사에 문의하십시오(이전 참조
섹션).

libguestfs: 오류: 발견 어떤 적당한 libguestfs 슈퍼민, 고정 or 구식 기구
on LIBGUESTFS_PATH
febootstrap-supermin-도우미: 내선 2: 부모의 예배 규칙서 지원 발견
슈퍼민 도우미: 내선 2: 부모의 예배 규칙서 지원 발견
[이 문제는 libguestfs ≥ 1.26에서 영구적으로 수정되었습니다.]

Debian/Ubuntu에서 이러한 오류가 표시되면 다음 명령을 실행해야 합니다.

sudo 업데이트-guestfs-어플라이언스

"허가 거부 됨" 언제 달리는 libguestfs as 뿌리
실행 중인데도 디스크 이미지를 열 때 권한 거부 오류가 발생합니다.
libguestfs를 루트로.

이것은 libvirt에 의해 발생하므로 libvirt 백엔드를 사용할 때만 발생합니다. 실행시
루트로 libvirt는 qemu 어플라이언스를 사용자 "qemu.qemu"로 실행하기로 결정합니다. 안타깝게도
이것은 일반적으로 qemu가 디스크 이미지를 열 수 없음을 의미합니다. 특히 해당 디스크 이미지가
루트가 소유하거나 루트 액세스가 필요한 디렉토리에 있습니다.

이 문제를 해결하기 위해 libvirt에 대해 열려 있는 버그가 있습니다.
https://bugzilla.redhat.com/show_bug.cgi?id=1045069

다음 방법 중 하나로 이 문제를 해결할 수 있습니다.

· 직접 백엔드로 전환:

내보내기 LIBGUESTFS_BACKEND=직접

· libguestfs를 루트로 실행하지 마십시오.

· qemu 사용자가 액세스할 수 있도록 디스크 이미지와 모든 상위 디렉토리를 Chmod합니다.

· (추한) 편집 /etc/libvirt/qemu.conf "사용자" 설정을 변경합니다.

예외: /초기화: 허가 부정한
참고 : libguestfs의 배포판 패키지(예: from
Fedora, Debian 등) 그런 다음 배포판에 대한 버그를 제출합니다. 이것은 오류가 아닙니다.
일반 사용자는 배포판 패키지가 올바르게 준비되었는지 확인해야 합니다.

이 오류는 기기 시작의 supermin 부팅 단계에서 발생합니다.

supermin: 새 루트 마운트 / 루트
슈퍼민: chroot
execl: /init: 권한이 거부되었습니다.
수퍼민: 디버그: 디렉토리 나열 /
[...많은 디버그 출력이 뒤따랐습니다...]

이것은 다음과 관련된 복잡한 버그입니다. 슈퍼민(1) 기구. 기기가 구성됩니다.
다음과 같은 파일을 복사하여 / bin / bash 호스트의 많은 라이브러리. 파일 "호스트 파일"
호스트에서 어플라이언스로 복사해야 하는 파일을 나열합니다. 일부 파일의 경우
호스트에 존재하지 않으면 누락되지만 이러한 파일이 순서대로 필요한 경우
(예) 달리다 / bin / bash 그러면 위의 오류가 표시됩니다.

문제 진단에는 필요한 라이브러리를 연구하는 것이 포함됩니다. / bin / bash, 즉 :

ldd / bin / bash

호스트 파일 시스템에서 실제로 사용 가능한 파일과 "호스트 파일"과 비교
오류 메시지에 인쇄된 디버그 출력과 함께. 어떤 파일인지 확인했으면
누락된 경우 패키지 관리자를 사용하여 해당 파일을 설치하고 다시 시도하십시오.

다음과 같은 파일도 확인해야 합니다. /초기화/ bin / bash (기기에서)
실행 가능. 디버그 출력은 파일 모드를 보여줍니다.

다운로드 중, 설치, 컴파일 LIBGUESTFS


어디에 I 얻을 전에, 최근 바이너리 for ...?
페도라 ≥ 11
사용

yum install '*guestf*'

최신 빌드는 다음을 참조하세요.
http://koji.fedoraproject.org/koji/packageinfo?패키지 ID=8391

Red Hat Enterprise Linux
RHEL 5
공식 RHEL 5에 포함된 버전은 매우 오래된 버전이므로 다음을 제외하고 사용해서는 안 됩니다.
virt-v2v와 함께. EPEL에서 최신 libguestfs 1.20 패키지 사용
5: https://fedoraproject.org/wiki/EPEL

RHEL 6
RHEL 7
기본 설치의 일부입니다. RHEL 6 및 7(만 해당)에서는 다음을 설치해야 합니다.
"libguestfs-winsupport"를 사용하여 Windows 게스트 지원을 받으세요.

데비안과 우분투
libguestfs < 1.26의 경우 libguestfs를 설치한 후 다음을 수행해야 합니다.

sudo 업데이트-guestfs-어플라이언스

(이 스크립트는 libguestfs ≥ 1.26인 Debian/Ubuntu에서 제거되었으며 대신
어플라이언스는 주문형으로 제작됩니다.)

우분투에서만:

sudo chmod 0644 /boot/vmlinuz*

"kvm" 그룹에 자신을 추가해야 할 수도 있습니다.

sudo usermod -a -G kvm 로그인

데비안 스퀴즈 (6)
Hilko Bengen은 스퀴즈 백포트에 libguestfs를 구축했습니다.
http://packages.debian.org/search?keywords=guestfs&searchon=names§ion=all&suite=squeeze-backports

Debian Wheezy 이상(7+)
Hilko Bengen은 데비안에서 libguestfs를 지원합니다. 공식 데비안 패키지는
사용할 수 : http://packages.debian.org/search?키워드=libguestfs

Ubuntu
우리는 풀 타임 Ubuntu 유지 관리자가 없으며 패키지가 제공합니다.
우리가 통제할 수 없는 Canonical은 때때로 깨집니다.

Canonical은 커널에 대한 권한을 변경하기로 결정했습니다.
루트를 제외하고 읽을 수 있습니다. 이것은 완전히 어리석은 일이지만 그들은 그것을 바꾸지 않을 것입니다.
(https://bugs.launchpad.net/ubuntu/+source/linux/+bug/759725). 그래서 모든 사용자는
다음을 수행해야 합니다.

sudo chmod 0644 /boot/vmlinuz*

우분투 12.04
이 Ubuntu 버전의 libguestfs는 작동하지만 febootstrap을 업데이트해야 합니다.
그리고 seabios를 최신 버전으로.

다음에서 febootstrap ≥ 3.14-2가 필요합니다.
http://packages.ubuntu.com/precise/febootstrap

febootstrap을 설치하거나 업데이트한 후 어플라이언스를 재구축합니다.

sudo 업데이트-guestfs-어플라이언스

다음에서 seabios ≥ 0.6.2-0ubuntu2.1 또는 ≥ 0.6.2-0ubuntu3이 필요합니다.
http://packages.ubuntu.com/precise-updates/seabios or
http://packages.ubuntu.com/quantal/seabios

또한 다음을 수행해야 합니다(위 참조).

sudo chmod 0644 /boot/vmlinuz*

젠투
Libguestfs는 Andreis Vinogradovs(libguestfs)에 의해 2012-07년에 Gentoo에 추가되었습니다.
Maxim Koltsov(주로 hivex). 하다:

이머징 libguestfs

수세
Libguestfs는 2012년 Olaf Hering에 의해 SuSE에 추가되었습니다.

아치 리눅스
Libguestfs는 2010년 AUR에 추가되었습니다.

기타 Linux 배포판
소스에서 컴파일합니다(다음 섹션).

기타 비 Linux 배포판
소스에서 컴파일하고 이식해야 합니다.

방법 I 편집하다 설치 libguestfs 출처?
git 또는 소스 tarball에서 libguestfs를 컴파일할 수 있습니다. README 파일을 읽기 전에
시작.

Git: https://github.com/libguestfs/libguestfs 소스 tarball:
http://libguestfs.org/download

"make install"을 실행하지 마십시오! 사용 "./ 운영" 대신 스크립트(README 참조).

방법 I 편집하다 설치 libguestfs if my 배포판 하지 않습니다 있다 충분히
qemu/슈퍼민/커널?
Libguestfs는 supermin 5가 필요합니다. supermin 5가 배포판에 이식되지 않은 경우 다음을 참조하세요.
아래 질문.

먼저 소스에서 qemu, supermin 및/또는 커널을 컴파일합니다. 당신은 지원 "만들어야 한다
설치"하십시오.

libguestfs 소스 디렉토리에서 두 개의 파일을 작성하십시오. "localconfigure"에는 다음이 포함되어야 합니다.

소스 로컬 환경
#내보내기 경로=/tmp/qemu/x86_64-softmmu:$PATH
./autogen.sh --접두사 / usr "$@"

"localconfigure"를 실행 가능하게 만드십시오.

"localenv"에는 다음이 포함되어야 합니다.

#export SUPERMIN=/tmp/supermin/src/supermin
# 내보내기 LIBGUESTFS_HV=/tmp/qemu/x86_64-softmmu/qemu-system-x86_64
#export SUPERMIN_KERNEL=/tmp/linux/arch/x86/boot/bzImage
#export SUPERMIN_KERNEL_VERSION=4.XX.0
#export SUPERMIN_MODULES=/tmp/lib/modules/4.XX.0

가지고 있는 대체 프로그램을 사용하기 위해 필요에 따라 이 라인의 주석을 제거하고 조정하십시오.
컴파일.

"./configure" 대신 "./localconfigure"를 사용하지만 그렇지 않으면 libguestfs를 다음과 같이 컴파일합니다.
보통의.

"make install"을 실행하지 마십시오! 사용 "./ 운영" 대신 스크립트(README 참조).

방법 I 편집하다 설치 libguestfs 없이 슈퍼민?
supermin 5가 배포판을 지원하지만 새로운 supermin이 없는 경우
설치한 다음 이전 질문을 참조하세요.

supermin 5가 배포판을 전혀 지원하지 않는 경우 "fixed
미리 컴파일된 바이너리 어플라이언스를 사용하는 "어플라이언스 메서드". libguestfs를 빌드하려면
supermin이 없으면 "--disable-appliance --disable-daemon"을 다음 중 하나에 전달해야 합니다.
./autogen.sh or ./configure를 (git에서 빌드하는지 아니면 빌드하는지에 따라
타르볼에서). 그런 다음 libguestfs를 사용할 때 절대로 필요한 것 "LIBGUESTFS_PATH" 설정
에 설명된 대로 사전 컴파일된 기기의 디렉토리에 대한 환경 변수
"고정 기기" 손님(3).

사전 컴파일된 기기의 경우 다음 항목도 참조하십시오. http://libguestfs.org/download/binaries/appliance/.

더 많은 Linux 배포판에 supermin을 이식하는 패치를 환영합니다.

방법 I 더하다 SUPPORT for sVirt?
주의 사항 for 페도라/RHEL 사용자 : 이 구성은 Fedora 18부터 기본 설정이며
RHEL 7. 문제를 발견하면 알려주거나 버그를 신고하십시오.

SVirt는 SELinux를 사용하여 강화된 어플라이언스를 제공하므로 불량 디스크에는 매우 어렵습니다.
libguestfs의 감금에서 "탈출"하고 호스트를 손상시키는 이미지(정확히 말하면
표준 libguestfs에서도 이것이 어려울 수 있지만 sVirt는
호스트 보호 및 더 중요한 것은 동일한 호스트의 가상 머신 보호
서로에게서).

현재 sVirt를 활성화하려면 libvirt ≥ 0.10.2(1.0 이상 권장)가 필요합니다.
libguestfs ≥ 1.20 및 최근 Fedora의 SELinux 정책. 실행하지 않는 경우
Fedora 18+, SELinux 정책을 변경해야 합니다.
메일 링리스트.

요구 사항이 있으면 다음을 수행합니다.

./configure --with-default-backend=libvirt # libguestfs >= 1.22
./configure --with-default-attach-method=libvirt # libguestfs <= 1.20
확인

SELinux를 Enforcing 모드로 설정하면 sVirt가 자동으로 사용됩니다.

libguestfs의 모든 또는 거의 모든 기능은 sVirt에서 작동해야 합니다. 알려진 것이 하나 있다
결점: 가상 구조(1) libvirt(따라서 sVirt)를 사용하지 않지만 직접
케무 출시. 따라서 현재 사용할 때 sVirt 보호의 이점을 얻지 못할 것입니다.
가상 구조.

libvirtd 로깅을 활성화하여 sVirt가 사용 중인지 확인할 수 있습니다(참조
/etc/libvirt/libvirtd.log), libvirtd 종료 및 재시작, 로그 파일 확인
"Setting SELinux context on ..." 메시지용.

이론적으로 sVirt는 AppArmor를 지원해야 하지만 우리는 시도하지 않았습니다. 거의
확실히 libvirt를 패치하고 AppArmor 정책을 작성해야 합니다.

Libguestfs a 정말 명부 of 의존성!
기본 라이브러리는 크게 의존하지 않지만 긴 목록의 세 가지 원인이 있습니다.
다른 종속성:

1. Libguestfs는 다양한 디스크 형식을 읽고 편집할 수 있어야 합니다. 예를 들어,
XFS 지원에는 XFS 도구가 필요합니다.

2. 다양한 언어에 대한 언어 바인딩이 있으며 모두 고유한 언어가 필요합니다.
개발 도구. 모든 언어 바인딩(C 제외)은 선택 사항입니다.

3. 비활성화할 수 있는 몇 가지 선택적 라이브러리 기능이 있습니다.

libguestfs ≥ 1.26이므로 기기 종속성을 분할할 수 있습니다(항목 1 in
위의 목록) 따라서 (예) "libguestfs-xfs"를 별도의 하위 패키지로 가지고 있습니다.
XFS 디스크 이미지 처리. 다운스트림 패키지 제작자가 기본 분할을 시작하도록 권장합니다.
libguestfs 패키지를 더 작은 하위 패키지로 만듭니다.

오류 ...동안 시작 on 페도라 18, RHEL 7
Fedora ≥ 18 및 RHEL ≥ 7에서 libguestfs는 libvirt를 사용하여 어플라이언스를 관리합니다. 이전에
(및 업스트림) libguestfs는 qemu를 직접 실행합니다.

┌───────────────────────────────────┐
│ libguestfs │
├─────────────────────────────────────┤
│ 직접 백엔드 │ libvirt 백엔드 │
└────────────────────────────────────┘
↓ ↓
┌───────┐ ┌──────────┐
│ 큐뮤 │ │ libvirtd │
└───────┘ └───────────┘

┌───────┐
│ 케무 │
└────────┘

업스트림 페도라 18+
비 Fedora RHEL 7+
비 RHEL

libvirt 백엔드는 SELinux/sVirt를 지원하여 더 정교합니다(위 참조).
핫플러깅 등. 그러나 더 복잡하고 덜 강력합니다.

libvirt 백엔드를 사용하여 권한 문제가 있는 경우 직접
이 환경 변수를 설정하여 백엔드:

내보내기 LIBGUESTFS_BACKEND=직접

libguestfs 프로그램이나 virt 도구를 실행하기 전에

방법 I 스위치 a 고정 / 미리 만들어진 기구?
이렇게 하면 Fedora 및 RHEL에서 libguestfs의 안정성과 성능이 향상될 수 있습니다.

libguestfs를 설치한 후 언제든지 루트로 다음 명령을 실행하십시오.

mkdir -p /usr/local/lib/guestfs/기기
libguestfs-make-fixed-appliance /usr/local/lib/guestfs/기기
ls -l /usr/local/lib/guestfs/기기

이제 libguestfs 또는 virt 도구를 사용하기 전에 다음 환경 변수를 설정하십시오.

내보내기 LIBGUESTFS_PATH=/usr/local/lib/guestfs/appliance

물론 원하는 디렉토리로 경로를 변경할 수 있습니다. 기기를 공유할 수 있습니다.
동일한 아키텍처(예: 모든 x86-64)를 가진 시스템에서 libvirt
권한 문제(따라서
직접 백엔드로 전환하거나 NFS를 사용하지 마십시오.

방법 I 속도 up libguestfs 빌드?
지금까지 가장 중요한 것은 Squid를 설치하고 적절하게 구성하는 것입니다.
Squid와 함께 제공되는 기본 구성은 쓰레기이므로 구성하는 것이
선택 사항이 아닙니다.

Squid 구성을 시작하기에 아주 좋은 위치는 다음과 같습니다.
https://fedoraproject.org/wiki/Extras/MockTricks#Using_Squid_to_Speed_Up_Mock_package_downloads

Squid가 실행 중이고 환경 변수 $http_proxy 및 $ftp_proxy가
그것을 가리키고 있습니다.

Squid가 실행되고 올바르게 구성되면 어플라이언스 빌드를 몇 개로 줄여야 합니다.
분 거리에 있습니다.

방법 I 속도 up libguestfs 빌드 (데비안)?

Hilko Bengen은 데비안 아카이브 프록시인 "대략"을 사용할 것을 제안합니다.
(http://packages.debian.org/approx). 이 도구는 데비안에 문서화되어 있습니다. (8)
매뉴얼 페이지.

속도, 디스크 스페이스 익숙한 BY LIBGUESTFS


참고 : 이 섹션에 있는 대부분의 정보가 이동되었습니다. guestfs 성능(1).

가이드라가 or 쓰다 보다 대단히 느린.
기본 디스크가 완전히 할당되지 않은 경우(예: 희소 원시 또는 qcow2) 쓰기가
호스트 운영 체제가 비용이 많이 드는 디스크 할당을 수행해야 하기 때문에 속도가 느립니다.
쓰기. 해결책은 대신 완전히 할당된 형식을 사용하는 것입니다. 희소하지 않은 원시 또는
"preallocation=metadata" 옵션이 있는 qcow2.

Libguestfs 사용 너무 많은 디스크 우주!
libguestfs는 다음 위치에 대규모 어플라이언스를 캐시합니다.

/var/tmp/.guestfs-

환경 변수 "TMPDIR"이 정의된 경우 $TMPDIR/.guestfs- 사용
대신.

libguestfs를 사용하지 않을 때는 이 디렉토리를 삭제하는 것이 안전합니다.

virt-sparsify 확인 전에, 영상 성장 전에, 가득 찬 크기 of 전에, 가상 디스크
에 입력하는 경우 virt-sparsify(1)이 원시이면 출력은 원시 희소가 됩니다. 확실하게하다
"du -sh"와 같은 희소성을 이해하는 도구로 출력을 측정하고 있습니다.
큰 차이를 만들 수 있습니다.

$ ls -lh test1.img
-rw-rw-r--. 1 rjones rjones 100M 8월 08일 08:1 testXNUMX.img
$ du -sh test1.img
3.6만 테스트1.img

(겉보기 크기 비교 100M 대 실제 크기 3.6M)

이 모든 것이 혼란스럽다면 다음을 지정하여 희소하지 않은 출력 형식을 사용하십시오. --전환하다
옵션, 예:

virt-sparsify --qcow2 disk.raw disk.qcow2 변환

하지 않습니다 가상 크기 조정 on 전에, 디스크 영상 제자리에?
디스크 이미지의 크기를 조정하는 것은 매우 까다롭습니다. 특히 데이터가 손실되거나
부트로더를 끊습니다. 현재 방법은 새 디스크 이미지를 효과적으로 생성하고 복사합니다.
데이터 플러스 이전 부트로더. 일이 잘못되면 항상 갈 수 있습니다
원래대로 돌아갑니다.

virt-resize 작업을 제자리에서 수행하려면 다음과 같은 제한 사항이 있어야 합니다.
예를 들어 기존 파티션을 이동할 수 없습니다(데이터를
동일한 디스크가 정전 또는 충돌 시 데이터를 손상시킬 가능성이 가장 높음),
그리고 LVM은 지원하기가 매우 어려울 것입니다(거의 임의적인 매핑 때문에
LV 콘텐츠와 기본 디스크 블록 사이).

우리가 고려한 또 다른 방법은 원본 디스크 이미지 위에 스냅샷을 배치하는 것입니다.
원본 데이터는 변경되지 않고 차이점만 스냅샷에 기록됩니다.
"qemu-img create" + "virt-resize"를 사용하여 오늘 이 작업을 수행할 수 있지만 qemu는 현재
동일한 블록이 이미 스냅샷에 다시 기록될 때를 인식할 수 있을 만큼 똑똑합니다.
백업 디스크에 있으므로 공간이나 시간이 절약되지 않습니다.

요약하면 이것은 어려운 문제이며 현재 우리가 가지고 있는 대부분이 효과가 있으므로 꺼려합니다.
을 변경할 수 있습니다.

하지 않습니다 virt-sparsify on 전에, 디스크 영상 제자리에?
libguestfs ≥ 1.26에서 virt-sparsify는 이제 제자리에서 디스크 이미지에서 작동할 수 있습니다. 사용하다:

virt-sparsify --in-place disk.img

그러나 먼저 "IN-PLACE SPARSIFICATION"을 읽어야 합니다. virt-sparsify(1).

문제 덮개 디스크 제품 이미지


원격수행 libvirt 손님 be 열었습니다.
원격 libvirt 게스트를 여는 것은 현재 지원되지 않습니다. 예를 들어 다음은 작동하지 않습니다.

guestfish -c qemu://remote/system -d 게스트

원격 디스크를 열려면 어떻게든 내보내기를 수행한 다음 내보내기에 연결해야 합니다. 을위한
NBD를 사용하기로 결정한 경우의 예:

원격 $ qemu-nbd -t -p 10809 guest.img
로컬$ guestfish -a nbd://remote:10809 -i

다른 가능성으로는 ssh(qemu가 최신 버전인 경우), NFS 또는 iSCSI가 있습니다. "원격
저장" 손님(3).

방법 I 열 수 이상 디스크 출처?
라이브러리를 통해 액세스해야 하는 다른 시스템 내부에 디스크 이미지가 있습니다.
HTTP/REST/독점 API, 또는 어떤 방식으로든 압축 또는 보관됩니다. (하나의 예
OpenStack Glance 이미지를 실제로 다운로드하지 않고 원격으로 액세스할 수 있습니다.)

nbdkit(https://github.com/libguestfs/nbdkit)이라는 자매 프로젝트가 있습니다. 이것
프로젝트를 사용하면 모든 디스크 소스를 NBD 서버로 전환할 수 있습니다. Libguestfs는 NBD에 액세스할 수 있습니다.
직접 서버, 예:

guestfish -a nbd://remote

nbdkit은 자유 라이선스이므로 독점 라이브러리에 링크하거나 포함할 수 있습니다.
그리고 코드. 또한 간단하고 안정적인 플러그인 API가 있어 플러그인을 쉽게 작성할 수 있습니다.
앞으로도 계속 작동할 API입니다.

오류 열기 VMDK 디스크: "사용 a VMDK 기능 어느 is 지원 되지 않습니다. by 케무 버전 :
VMDK 버전 3"
Qemu(따라서 libguestfs)는 특정 VMDK 디스크 이미지만 지원합니다. 다른 사람들은 작동하지 않을 것입니다.
이것 또는 유사한 오류를 제공합니다.

이상적으로는 누군가가 최신 VMDK 기능을 지원하도록 qemu를 수정하지만 그 동안
세 가지 옵션이 있습니다.

1. 게스트가 연결 가능한 라이브 ESX 서버에서 호스팅되는 경우 다음을 찾아 다운로드합니다.
라는 디스크 이미지 somename-플랫.vmdk. 이름에도 불구하고 이것은 원시 디스크 이미지이며
무엇이든 열 수 있습니다.

최신 버전의 qemu 및 libguestfs가 있는 경우 다음을 수행할 수 있습니다.
HTTPS 또는 ssh를 사용하여 이 디스크 이미지에 원격으로 액세스합니다. 의 "원격 저장소"를 참조하십시오.
손님(3).

2. VMware의 독점 vdiskmanager 도구를 사용하여 이미지를 원시 형식으로 변환합니다.

3. 독점 VDDK 플러그인과 함께 nbdkit을 사용하여 디스크 이미지를 NBD로 라이브 내보내기
원천. 이렇게 하면 VMDK 파일을 읽고 쓸 수 있습니다.

UFS 디스크 (같이 익숙한 by 비에스디) be 열었습니다.
UFS 파일 시스템 형식에는 많은 변형이 있으며 이러한 변형은 자체적으로 식별되지 않습니다. NS
Linux 커널은 libguestfs가 사용할 수 없는 UFS 변종을 알려야 합니다.
알아요.

이러한 파일 시스템을 마운트할 때 올바른 "ufstype" 마운트 옵션을 전달해야 합니다.

https://www.kernel.org/doc/Documentation/filesystems/ufs.txt 참조

Windows 참고 문헌
Windows ReFS는 Microsoft의 ZFS/Btrfs 복사본입니다. 이 파일 시스템은 아직 반전되지 않았습니다.
Linux 커널에서 설계 및 구현되었으므로 libguestfs는 지원하지 않습니다.
그것. 현재로서는 "야생에서" 매우 드문 것으로 보입니다.

비 ASCII 문자 하지 표시 on VFAT 파일 시스템.
이 문제의 일반적인 증상:

· 파일 이름에 비 ASCII가 포함된 파일을 만들 때 오류가 발생합니다.
문자, 특히 아시아 언어(중국어, 일본어,
등). 파일 시스템은 VFAT입니다.

· VFAT 파일 시스템에서 디렉토리를 나열하면 파일 이름이 물음표로 나타납니다.

이것은 GNU/Linux 시스템의 설계 결함입니다.

VFAT는 긴 파일 이름을 UTF-16 문자로 저장합니다. 파일 이름을 열거나 반환할 때
Linux 커널은 이것을 8비트 문자열 형식으로 변환해야 합니다. UTF-8은
비 UTF-8 로케일(사용자의
로케일은 libc의 기능이기 때문에 커널에 알려져 있지 않습니다.

따라서 마운트할 때 수행하려는 번역을 커널에 알려야 합니다.
파일 시스템. 두 가지 방법은 "iocharset" 매개변수입니다(
libguestfs) 및 "utf8" 플래그.

따라서 VFAT 파일 시스템을 사용하려면 마운트할 때 "utf8" 플래그를 추가해야 합니다. 게스트 피쉬에서,
용도:

> 마운트 옵션 utf8 /dev/sda1 /

또는 guestfish 명령줄에서:

guestfish [...] -m /dev/sda1:/:utf8

또는 API에서:

guestfs_mount_options(g, "utf8", "/dev/sda1", "/");

그런 다음 커널은 파일 이름을 UTF-8 문자열로 또는 그 반대로 변환합니다.

이 마운트 옵션을 투명하게 추가하는 것을 고려했지만 불행히도 몇 가지가 있습니다.
그렇게 할 때의 문제:

· 일부 Linux 시스템에서 "utf8" 마운트 옵션이 작동하지 않습니다. 우리는 정확하게
어떤 시스템 또는 그 이유를 이해하지만 한 사용자가 이를 확실하게 보고했습니다.

· "iocharset" 매개변수가 호환되지 않기 때문에 사용할 수 없습니다.
"utf8"로. 이 매개변수를 사용하는 것은 좋은 생각이 아닐 수 있지만
그것을 막기 위해.

비 ASCII 문자 표시 as 밑줄 (_) on ISO9660 파일 시스템.
파일 시스템이 mkisofs 또는 genisoimage로 올바르게 준비되지 않았습니다. 확인
파일 시스템은 Joliet 및/또는 Rock Ridge 확장을 사용하여 생성되었습니다. libguestfs는 그렇지 않습니다
파일 시스템을 처리하려면 특별한 마운트 옵션이 필요합니다.

수 없습니다 열 수 Windows 손님 어느 사용 NTFS
다음과 같은 오류가 표시됩니다.

마운트: 알 수 없는 파일 시스템 유형 'ntfs'

Red Hat Enterprise Linux 또는 CentOS에서는 libguestfs-winsupport를 설치해야 합니다.
패키지.

수 없습니다 열 수 or 검사 RHEL 7 손님.
수 없습니다 열 수 Linux 손님 어느 사용 XFS.
RHEL 7 게스트 및 XFS를 사용하는 다른 게스트는 libguestfs에서 열 수 있지만
"libguestfs-xfs" 패키지를 설치해야 합니다.

사용 LIBGUESTFS IN 귀하의 개인적인 프로그램


XNUMXD덴탈의 API 수백 of 행동 양식, 어디에 do I 스타트?
API 개요: "API 개요"에서 시작하는 것이 좋습니다. 손님(3).

API 개요는 C API를 다루지만 다음과 같은 경우에도 읽을 가치가 있습니다.
API가 동일하기 때문에 다른 프로그래밍 언어를 사용할 것입니다.
호출 이름에 대한 논리적 변경:

C guestfs_ln_sf(g, 대상, 링크 이름);
Python g.ln_sf(대상, 링크 이름);
OCaml g#ln_sf 대상 링크 이름;
Perl $g->ln_sf(대상, 링크 이름);
Shell(guestfish) ln-sf 대상 링크 이름
PHP guestfs_ln_sf($g, $target, $linkname);

API 개요에 익숙해지면 이 시작 목록을 살펴봐야 합니다.
다른 언어 바인딩에 대한 포인트: "다른 프로그래밍 언어와 함께 LIBGUESTFS 사용"
손님(3).

I 사용 libguestfs in my 소유권 / 닫은 / 상업 프로그램?
일반적으로 그렇습니다. 그러나 이것은 법적 조언이 아닙니다. 함께 제공되는 라이센스를 읽으십시오.
libguestfs 및 특정 질문이 있는 경우 변호사에게 문의하십시오.

소스 트리에서 라이센스는 "COPYING.LIB" 파일에 있습니다(라이브러리의 경우 LGPLv2+ 및
바인딩) 및 "COPYING"(독립 실행형 프로그램의 경우 GPLv2+).

디버깅 LIBGUESTFS


도움말 그건 지원 일!
libguestfs 프로그램이 전혀 작동하지 않는 것 같으면 아래 프로그램을 실행하고 붙여넣습니다.
완전한, 편집되지 않은 "libguestfs" @ "redhat.com"에 이메일로 출력:

libguestfs-테스트-도구

특정 작업이 실패하면 이 체크리스트의 모든 정보를 이메일로 제공하십시오.
"libguestfs" @ "redhat.com"으로:

1. 무엇을하려고합니까?

2. 정확히 어떤 명령을 실행했습니까?

3. 이 명령의 정확한 오류 또는 출력은 무엇이었습니까?

4. 디버깅을 활성화하고 명령을 다시 실행하고 완전한 출력. Do 지원
편집 전에, 출력.

내보내기 LIBGUESTFS_DEBUG=1
내보내기 LIBGUESTFS_TRACE=1

5. libguestfs 버전, 운영 체제 버전 및 설치 방법을 포함합니다.
libguestfs(예: 소스에서, "yum install" 등)

방법 do I 디버그 언제 사용 어떤 libguestfs 프로그램 or 수단 (예 : 가상 v2v or virt-df)?
더 많은 것을 얻기 위해 설정할 수 있는 두 개의 "LIBGUESTFS_*" 환경 변수가 있습니다.
libguestfs의 정보입니다.

"LIBGUESTFS_TRACE"
이것을 1로 설정하면 libguestfs가 각 명령/API 호출을 다음과 같은 형식으로 인쇄합니다.
guestfish 명령과 유사합니다.

"LIBGUESTFS_DEBUG"
대량의 디버그 메시지를 활성화하려면 이 값을 1로 설정하십시오. 당신이 생각한다면
libguestfs 어플라이언스 내부에 문제가 있는 경우 이를 사용해야 합니다.
옵션을 선택합니다.

쉘에서 설정하려면 프로그램을 실행하기 전에 다음을 수행하십시오.

내보내기 LIBGUESTFS_TRACE=1
내보내기 LIBGUESTFS_DEBUG=1

csh/tcsh의 경우 동등한 명령은 다음과 같습니다.

setenv LIBGUESTFS_TRACE 1
setenv LIBGUESTFS_DEBUG 1

자세한 내용은 "환경 변수"를 참조하십시오. 손님(3).

방법 do I 디버그 언제 사용 손님 물고기?
위와 동일한 환경 변수를 사용할 수 있습니다. 또는 guestfish 옵션을 사용하십시오.
-x(명령 추적) 또는 -v(전체 디버그 출력 가져오기) 또는 둘 다.

자세한 내용은 다음을 참조하십시오. 게스트 피쉬(1).

방법 do I 디버그 언제 사용 전에, API?
"guestfs_set_trace" 호출 손님(3) 명령 추적 활성화 및/또는
"guestfs_set_verbose" 손님(3) 디버그 메시지를 활성화합니다.

최상의 결과를 얻으려면 이러한 함수를 생성한 직후에 가능한 한 빨리 호출하십시오.
guestfs는 가능한 경우 실행을 호출하기 전에 처리합니다.

방법 do I 포착 디버그 출력 놓다 it 으로 my 로깅 시스템?
이벤트 API를 사용합니다. 예를 들어, "이벤트 처리를 위한 콜백 설정"을 참조하십시오. 손님(3)
그리고 example/debug-logging.c libguestfs 소스의 프로그램.

파기 깊이 으로 전에, 기구 신병 프로세스.
디버깅을 활성화한 다음 어플라이언스 부팅 프로세스에 대한 이 설명서를 읽으십시오.
guestfs 내부(1).

libguestfs 달다 or 실패 ...동안 실행/실행.
디버깅을 활성화하고 전체 출력을 확인합니다. 무슨 일이 일어나고 있는지 알아낼 수 없다면,
포함하여 버그 보고서를 제출하십시오. 완전한 출력 libguestfs-테스트-도구(1).

디버깅 libvirt
libvirt 백엔드를 사용 중이고 libvirt가 실패하면 다음을 활성화할 수 있습니다.
편집하여 디버깅 /etc/libvirt/libvirtd.conf.

루트가 아닌 사용자로 실행 중인 경우 다른 파일을 편집해야 합니다. 창조하다
~/.config/libvirt/libvirtd.conf 포함 :

로그레벨=1
log_outputs="1:파일:/tmp/libvirtd.log"

실행 중인 모든 세션(루트가 아닌) libvirtd를 종료하고 다음에 libguestfs를 실행할 때
명령을 실행하면 libvirtd의 유용한 디버깅 정보가 많이 표시되어야 합니다.
/tmp/libvirtd.log

디자인/내부 OF LIBGUESTFS


참조 guestfs 내부(1).

하지 당신 do 모두 을 통하여 전에, 퓨즈 / 파일 시스템 상호 작용?
라는 명령을 제공합니다. 게스트 마운트(1) 게스트 파일 시스템을 마운트할 수 있습니다.
주인. 이것은 FUSE 모듈로 구현됩니다. 전체를 구현하지 않는 이유는 무엇입니까?
크고 복잡한 API를 사용하는 대신 이 메커니즘을 사용하여 libguestfs를 사용하시겠습니까?

이유는 두 가지입니다. 첫째, libguestfs는 다음과 같은 작업을 위한 API 호출을 제공합니다.
파일 시스템에 맞지 않는 파티션 및 논리 볼륨 생성 및 삭제
아주 쉽게 모델을 만들 수 있습니다. 또는 오히려 다음과 같이 맞출 수 있습니다. 예를 들어 파티션 생성
"mkdir /fs/hda1"에 매핑할 수 있지만 선택할 방법을 지정해야 합니다.
파티션 크기("echo 100M > /fs/hda1/.size") 및 파티션 유형,
섹터 등을 시작하고 끝낼 수 있지만 일단 완료하면 파일 시스템 기반 API가 시작됩니다.
우리가 현재 가지고 있는 호출 기반 API보다 더 복잡해 보입니다.

두 번째 이유는 효율성 때문입니다. FUSE 자체는 합리적으로 효율적이지만
FUSE 모듈에 대해 작고 독립적인 호출을 많이 합니다. guestmount에서 이것들은
큰 오버헤드가 있는 libguestfs 어플라이언스에 대한 메시지로 변환됩니다.
및 왕복). 예를 들어, 64KB 청크로 파일을 읽는 것은 비효율적입니다.
청크는 단일 왕복으로 바뀝니다. libguestfs API에서는 훨씬 더
다음과 같은 스트리밍 호출 중 하나를 통해 전체 파일 또는 디렉토리를 다운로드하는 데 효율적입니다.
"guestfs_download" 또는 "guestfs_tar_out".

하지 당신 do 모두 을 통하여 GVFS?
문제는 FUSE의 문제와 유사합니다.

GVFS는 POSIX/FUSE보다 더 나은 추상화입니다. GVFS용 FTP 백엔드가 있습니다.
FTP는 개념적으로 libguestfs API와 유사하기 때문에 권장됩니다. 그러나 GVFS
FTP 백엔드는 상호 작용을 유지하기 위해 여러 동시 연결을 만듭니다.
우리는 libguestfs로 쉽게 할 수 없습니다.

I 쓰다 전에, 디스크, 조차 그래도 I 추가 it 읽기 전용?
하지 "--로" 표시 있다 아니 효과?
디스크 읽기 전용을 추가하면 libguestfs는 쓰기 가능한 오버레이를 디스크 상단에 배치합니다.
기본 디스크. 쓰기는 이 오버레이로 이동하고 핸들이 닫힐 때 삭제됩니다.
(또는 "guestfish" 등 종료).

이렇게 하는 데에는 두 가지 이유가 있습니다. 첫째, 읽기 전용 디스크는
많은 경우(예: IDE는 단순히 지원하지 않으므로 IDE 에뮬레이트를 가질 수 없습니다.
읽기 전용 디스크(실제 libguestfs 설치에서는 일반적이지 않음).

두 번째로 더 중요한 것은 읽기 전용 디스크가 가능하더라도
그들을. "mount -o ro"라도 저널이 있는 파일 시스템을 마운트하면
저널을 재생하고 메타데이터를 업데이트해야 하기 때문입니다. 디스크의 경우
진정으로 읽기 전용이었다면 더티 파일 시스템을 마운트할 수 없었을 것입니다.

사용 가능하게 하기 위해 이러한 쓰기를 임시로 저장할 장소로 오버레이를 만들고,
그런 다음 나중에 폐기합니다. 이렇게 하면 기본 디스크가 항상 손상되지 않습니다.

또한 libguestfs를 빌드할 때 이에 대한 회귀 테스트가 있습니다(in
"test/qemu"). 이것이 패키저가 테스트 스위트를 실행하는 것이 중요한 이유 중 하나입니다.

가요 "--로" 확인 모든 디스크 읽기 전용?
안돼! "--ro" 옵션은 명령줄에 추가된 디스크에만 영향을 줍니다. "-a"를 사용하고
"-d" 옵션.

guestfish에서 "add" 명령을 사용하면 디스크가 읽기-쓰기로 추가됩니다.
명령을 사용하여 "readonly:true" 플래그를 명시적으로 지정).

I 사용 "게스트피쉬 --로" as a 방법 백업 my 가상 기계?
일반적으로 이것은 지원 좋은 아이디어. 질문에 대한 답변은 이 메일링에 자세히 나와 있습니다.
목록 게시: https://www.redhat.com/archives/libguestfs/2010-August/msg00024.html

다음 질문도 참조하십시오.

수 없습니다 I 운영 fsck on a 살고있다 파일 시스템 사용 "게스트피쉬 --로"?
이 명령은 일반적으로 지원 일 :

guestfish --ro -a /dev/vg/my_root_fs 실행 : fsck /dev/sda

그 이유는 qemu가 원본 파일 시스템에 대한 스냅샷을 생성하기 때문입니다.
엄격한 특정 시점 스냅샷을 생성하지 않습니다. 기본에 대한 데이터 블록
파일 시스템은 fsck 작업이 진행됨에 따라 호스트가 있는 다른 시간에 qemu에 의해 읽힙니다.
사이에 씁니다. 그 결과 fsck는 엄청난 손상을 봅니다(실제가 아닌 가상의 것입니다!).
그리고 실패합니다.

시점 스냅샷을 생성하기만 하면 됩니다. 논리 볼륨인 경우 다음을 사용하십시오.
LVM2 스냅샷. 파일 시스템이 btrfs/ZFS 파일과 같은 내부에 있는 경우
btrfs/ZFS 스냅샷을 사용한 다음 스냅샷에서 fsck를 실행합니다. 실제로 당신은하지 않습니다
이를 위해 libguestfs를 사용해야 합니다. 그냥 실행하세요. /sbin/fsck 직접.

호스트 장치 및 파일의 특정 시점 스냅샷 생성은
libguestfs가 생성되면 libguestfs에서 작동할 수 있지만.

무엇 전에, 차이 사이에 게스트 피쉬 가상 구조?
많은 사람들이 우리가 제공하는 두 가지 표면적으로 유사한 도구에 혼란스러워합니다.

$ guestfish --ro -a guest.img
> 운영
> fsck /dev/sda1

$ virt-rescue --ro guest.img
> /sbin/fsck / 개발자 / sda1

그리고 발생하는 관련 질문은 전체 셸 명령을 입력할 수 없는 이유입니다.
guestfish의 모든 --옵션과 함께(하지만 가상 구조(삼)).

게스트 피쉬(1)은 구조화된 액세스를 제공하는 프로그램입니다. 손님(3) API. 그것은 일어난다
좋은 대화형 셸도 있지만 주요 목적은 다음에서 구조화된 액세스
쉘 스크립트. Python 및 기타 바인딩과 같은 언어 바인딩과 비슷하다고 생각하면 됩니다.
그러나 쉘을 위해. guestfish(및 libguestfs API의 주요 차별화 요소)
일반) 변경을 자동화하는 기능입니다.

가상 구조(1)은 libguestfs 어플라이언스를 부팅하고
VM에 대한 임의 변경. 구조화되지 않아 자동화할 수 없지만
게스트에 대한 빠른 임시 수정은 매우 유용할 수 있습니다.

그러나 libguestfs에는 어플라이언스에 "백도어"가 있어 임의의
쉘 명령. virt-rescue만큼 유연하지 않습니다.
쉘 명령이지만 어쨌든 여기에 있습니다.

> 디버그 sh "cmd arg1 arg2 ..."

당신이해야합니다 지원 이것에 의존하십시오. 향후 제거되거나 변경될 수 있습니다. 만약 당신의
프로그램에 작업이 필요합니다. 대신 libguestfs API에 추가하십시오.

무엇 전에, 거래 "게스트피쉬 -NS"?
하지 가상 고양이 on a 현실 VM 영상, 비자 면제 프로그램에 해당하는 국가의 시민권을 가지고 있지만 가상 df on 어떤 디스크 영상?
하지 "아니 뿌리 장치 발견 in 운영 체계 영상" 평균?
이러한 질문은 모두 기본 수준에서 즉시 관련되지 않을 수 있습니다.
분명한.

에서 손님(3) API 수준에서 "디스크 이미지"는 파티션과 파일 시스템의 더미일 뿐입니다.

대조적으로 가상 머신이 부팅될 때 해당 파일 시스템을 일관된
다음과 같은 계층 구조:

/ (/dev/sda2)

├── /신병 (/dev/sda1)

├── 홈 / (/dev/vg_external/홈)

├── / usr (/dev/vg_os/lv_usr)

└─── / var (/dev/vg_os/lv_var)

(또는 Windows의 드라이브 문자).

API는 먼저 "파일 시스템 더미" 수준에서 디스크 이미지를 봅니다. 그러나 그것은 또한
운영 체제가 포함되어 있는지 확인하기 위해 디스크 이미지를 검사하는 방법이 있습니다.
디스크는 운영 체제가 부팅될 때 마운트됩니다: "INSPECTION" 손님(3).

사용자는 몇 가지 도구(예: 가상 고양이(1)) VM 경로 작업:

virt-cat fedora.img /var/log/messages

virt-cat은 그것을 어떻게 압니까? / var 파티션이 따로 있나요? 트릭은 virt-cat입니다.
디스크 이미지에 대한 검사를 수행하고 이를 사용하여 경로를 올바르게 변환합니다.

일부 도구( 가상 고양이(1) 가상 편집(1) 가상(1)) 검사를 사용하여 VM 매핑
경로. 다음과 같은 기타 도구 가상 df(1)과하면 가상 파일 시스템(1) 완전히 작동
libguestfs API의 원시 "파일 시스템의 큰 더미" 수준이며 검사를 사용하지 않습니다.

게스트 피쉬(1) 흥미로운 중간 지점에 있습니다. 사용하는 경우 -a-m 명령 줄
옵션을 선택하면 guestfish에게 디스크 이미지를 추가하는 방법과 마운트할 위치를 정확히 알려야 합니다.
파티션. 이것은 원시 API 레벨입니다.

당신이 사용하는 경우 -i 옵션, libguestfs는 검사를 수행하고 파일 시스템을 마운트합니다.
너.

"이 운영 체제 이미지에서 루트 장치를 찾을 수 없습니다" 오류가 이와 관련되어 있습니다. 그것
검사에서 제공한 디스크 이미지 내에서 운영 체제를 찾을 수 없음을 의미합니다.
그것. 무언가에서 실행하려고 하면 virt-cat과 같은 프로그램에서 이것을 볼 수 있습니다.
이는 가상 머신 디스크 이미지가 아닌 디스크 이미지일 뿐입니다.

do 이들 "디버그*" "내부의-*" 기능 해야 할 것?
디버깅 및 내부 목적으로 사용되는 몇 가지 기능이 있습니다. 지원
안정적인 API의 일부입니다.

"debug*"(또는 "guestfs_debug*") 기능, 주로 "guestfs_debug" 손님(3)과하면
소수의 다른 것들은 libguestfs 디버깅에 사용됩니다. 비록 그들이 일부는 아니지만
안정적인 API이므로 언제든지 변경되거나 제거될 수 있으므로 일부 프로그램은
기능이 libguestfs에 추가되기를 기다리는 동안 이러한 작업을 수행합니다.

"internal-*"(또는 "guestfs_internal_*") 기능은 순전히 libguestfs에서 사용됩니다.
그 자체. 프로그램에서 호출할 이유가 없으며 프로그램에서 사용하려고 해서는 안 됩니다.
그들을. 그것들을 사용하면 종종 나쁜 일이 일어날 뿐만 아니라
문서화된 안정적인 API.

개발자


어디에 do I 보내다 패치?
libguestfs 메일링 리스트에 패치를 보내주세요
https://www.redhat.com/mailman/listinfo/libguestfs. You don't have to be subscribed, but
게시가 수동으로 승인될 때까지 지연됩니다.

XNUMX-XNUMX학년도 PTA 학교 위원회의 지명 후보를 확인하시려면 하지 사용 github 당겨 요청 - 그들 의지 be 무시. 그 이유는 (a) 우리가 원하는
메일링 리스트에 있는 패치에 대해 논의하고 분석하기 위해 (b) github pull 요청이
커밋을 병합하지만 선형 기록을 선호합니다.

방법 do I 제안 a 특색?
기여하려는 대규모 새 기능은 메일링 리스트에서 논의되어야 합니다.
먼저 (https://www.redhat.com/mailman/listinfo/libguestfs). 이것은 실망을 피한다
기능이 libguestfs 프로젝트에 적합하지 않다고 생각하면 작업을 낭비하게 됩니다.

유용한 기능을 제안하고 싶지만 코드를 작성하고 싶지 않다면 다음을 제출할 수 있습니다.
요약 시작 부분에 "RFE: "가 있는 버그("도움 받기 및 버그 보고하기" 참조)
줄입니다.

Who 범하다 libguestfs 자식?
약 5명이 github에 커밋 액세스 권한을 가지고 있습니다. 패치는 먼저 목록에 게시해야 합니다.
그리고 확인했습니다. ACKing 및 패치 푸시 정책은 다음과 같습니다.

https://www.redhat.com/archives/libguestfs/2012-January/msg00023.html

I 포크 libguestfs?
물론 당신은 할 수. Git을 사용하면 libguestfs를 쉽게 포크할 수 있습니다. Github를 사용하면 훨씬 더 쉬워집니다.
포크와 포크의 이유에 대해 메일링 리스트에서 알려주면 좋습니다.

기타 사항 질문


I 모니터 전에, 살고있다 디스크 활동 of a 가상 기계 사용 libguestfs?
일반적인 요청은 libguestfs를 사용하여 라이브 디스크 활동을 모니터링하는 것입니다.
예를 들어, 게스트가 새 파일을 생성할 때마다 알림을 받습니다. Libguestfs
하지 지원 이 다이어그램에서 볼 수 있듯이 일부 사람들이 상상하는 방식으로 작업하십시오.

┌───────────────────────────────────────┐
│ libguestfs를 이용한 모니터링 프로그램 │
└───────────────────────────────────────┘

┌───────────┐ ┌────────────────────────┐
│ 라이브 VM │ │ libguestfs 어플라이언스 │
├───────────┤ ├────────────────────────┤
│ 커널(1)│ │ 기기 커널(2) │
└───────────┘ └────────────────────────┘
↓ ↓ (r/o 연결)
┌───────────────────────┐
| 디스크 이미지 |
└───────────────────────┘

이 시나리오는 안전합니다(드라이브를 추가할 때 "읽기 전용" 플래그를 설정하는 한).
그러나 libguestfs 어플라이언스 커널(2)은 디스크에 대한 모든 변경 사항을 확인하지 못합니다.
이미지, 두 가지 이유:

NS. VM 커널(1)은 데이터를 메모리에 캐시할 수 있으므로 디스크 이미지에 나타나지 않습니다.

ii. libguestfs 어플라이언스 커널(2)은 디스크 이미지가 변경될 것으로 예상하지 않습니다.
VM 커널(1)
디스크 이미지를 업데이트합니다.

지원되는 유일한 솔루션은 다음을 수행할 때마다 전체 libguestfs 어플라이언스를 다시 시작하는 것입니다.
디스크 이미지의 변경 사항을 확인하려고 합니다. 호출에 해당하는 API 수준에서
"guestfs_shutdown" 다음에 "guestfs_launch"가 옵니다. 이는 중량급 작업입니다(참조
또한 guestfs 성능(삼)).

어플라이언스를 다시 시작하는 것이 너무 어려운 경우 시도할 수 있는 지원되지 않는 해킹이 있습니다.
값비싼:

· "guestfs_drop_caches(g, 3)"를 호출합니다. 이로 인해 libguestfs의 모든 캐시된 데이터 도움말이 발생합니다.
어플라이언스 커널(2)이 삭제되므로 디스크 이미지로 돌아갑니다.

그러나 qemu도 일부 데이터를 캐시하기 때문에 이것만으로는 충분하지 않습니다. 너
또한 "cache=unsafe" 모드를 (재)활성화하기 위해 libguestfs를 패치해야 합니다. 보다:
https://rwmj.wordpress.com/2013/09/02/new-in-libguestfs-allow-cache-mode-to-be-selected/

· virt-bmap과 같은 도구를 대신 사용하십시오.

· 게스트 내부에서 에이전트를 실행합니다.

게스트가 더 근본적인 변경(예: 파일 시스템 삭제)을 수행하는 경우에는 아무 소용이 없습니다.
이러한 종류의 경우 어플라이언스를 다시 시작해야 합니다.

(실제로 조사하기 위해 일관된 스냅샷을 사용해야 하는 세 번째 문제가 있습니다.
라이브 디스크 이미지이지만 이는 라이브 디스크에 대해 libguestfs를 사용하는 일반적인 문제입니다.
영상.)

onworks.net 서비스를 사용하여 guestfs-faq 온라인 사용


무료 서버 및 워크스테이션

Windows 및 Linux 앱 다운로드

Linux 명령

Ad