사전 마운트 시작 스크립트를 작성하는 방법은 무엇입니까?

사전 마운트 시작 스크립트를 작성하는 방법은 무엇입니까?

/루트 파일 시스템을 캐시하는 데 사용하고 싶기 때문에 루트 파일 시스템을 마운트하기 전에 실행되는 시작 스크립트를 만들고 싶습니다 dm-cache. 스크립트에는 캐시 설정 명령이 포함되어야 합니다.

그러한 스크립트를 어디에 넣어야 하며 어떤 형식이 필요합니까?

인터넷 검색으로 유용한 문서를 찾을 수 없습니다.

Fedora 17, 커널 3.9.10을 실행 중입니다.

답변1

dm-cache github의 지침에 따라 캐시를 생성하려면 커널 모듈 dm_mod 및 dm_cache를 로드해야 합니다(이미 패치된 커널이 있다고 가정). 또한 dmsetup 실행 파일에 액세스해야 하며 아마도 /dev를 캐시가 생성될 장치에 액세스할 수 있도록 채웁니다.

cjm이 이미 언급했듯이 이를 수행하려면 하드 드라이브가 마운트되기 전에 메모리에 로드되는 파일 시스템인 initramfs를 수정해야 합니다.

다행히 dmsetup은 initramfs에 이미 설치되어 있습니다(볼륨 관리에서 필요하므로 항상 그래야 하지만 확인하려면 "lsinitramfs /initrd.img | grep dmsetup"을 사용하세요).

이로 인해 initramfs에 추가해야 할 두 가지 항목이 남습니다. 두 개의 모듈과 캐시를 생성하는 스크립트입니다. 모듈의 경우 /usr/share/initramfs-tools/modules 또는 /etc/initramfs-tools/modules를 편집하세요.

부팅 스크립트를 /usr/share/initramfs-tools/local-premount 또는 /etc/initramfs-tools/local-premount에 넣습니다. 이를 local-premount 하위 디렉터리에 넣으면 모듈이 로드되고 /dev가 채워지지만 /는 아직 마운트되지 않은 것을 확인할 수 있습니다. 스크립트는 일반 sh 스크립트일 수 있습니다. #!/bin/sh shebang을 사용하고 실행 가능하게 만드는 것을 잊지 마세요. 나는 당신이 그것을 직접 작성하는 방법을 알고 있다고 가정합니다. (그렇지 않으면 더 많은 정보를 제공하십시오)

update-initramfs -u를 실행하여 변경 사항을 적용하면 설정이 완료됩니다. 문제가 발생할 경우를 대비해 부팅할 수 있는 이전 커널이 아직 있는지 확인하세요.

initramfs-tools 사용 방법에 대한 일반적인 지침은 "man initramfs-tools"를 읽어보세요.

dracut 사용:

dracut은 모듈식 시스템을 사용하여 시작 프로세스를 관리합니다. initramfs-tools와 마찬가지로 사용해야 하는 사전 마운트라는 후크가 있습니다. 스크립트를 설치하려면 이 후크를 사용하는 모듈을 정의해야 합니다.

mkdir /usr/lib/dracut/modules.d/40dm-cache

이제 /usr/lib/dracut/modules.d/40dm-cache/module-setup.sh 파일을 편집하세요.

#!/bin/bash
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
check() {
return 0
}

depends() {
return 0
}

install() {
inst_hook pre-mount 91 "$moddir/dm-cache.sh"
}

installkernel() {
instmods dm_mod
instmods dm_cache
}

및 /usr/lib/dracut/modules.d/40dm-cache/dm-cache.sh

#!/bin/sh
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
modprobe dm_mod
modprobe dm_cache
***here you insert your caching code. As before, dmsetup should be available at /sbin/dmsetup***

check()가 0 대신 255를 반환하는 경우 dracut의 구성 파일에 지정된 경우에만 모듈이 로드됩니다. (0을 반환하면 무조건 로드됩니다.)

이제 initrd를 업데이트하십시오.

dracut --force

dracut 참조 가이드:https://www.kernel.org/pub/linux/utils/boot/dracut/dracut.html

관련 정보