mirror of
https://github.com/vdsm/virtual-dsm.git
synced 2025-06-07 17:07:58 +08:00
feat: Set NOCOW flag for btrfs
feat: Set NOCOW flag for btrfs
This commit is contained in:
commit
e3942da906
@ -18,6 +18,6 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- 5000:5000
|
- 5000:5000
|
||||||
volumes:
|
volumes:
|
||||||
- /opt/dsm:/storage
|
- /var/dsm:/storage
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
stop_grace_period: 2m
|
stop_grace_period: 2m
|
||||||
|
10
readme.md
10
readme.md
@ -39,7 +39,7 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- 5000:5000
|
- 5000:5000
|
||||||
volumes:
|
volumes:
|
||||||
- /opt/dsm:/storage
|
- /var/dsm:/storage
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
stop_grace_period: 2m
|
stop_grace_period: 2m
|
||||||
```
|
```
|
||||||
@ -65,14 +65,14 @@ docker run -it --rm -p 5000:5000 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti
|
|||||||
|
|
||||||
* ### How do I change the location of the virtual disk?
|
* ### How do I change the location of the virtual disk?
|
||||||
|
|
||||||
To change the virtual disk's location from the default Docker volume, include the following bind mount in your compose file:
|
To change the location of the virtual disk, include the following bind mount in your compose file:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
volumes:
|
volumes:
|
||||||
- /home/user/data:/storage
|
- /var/dsm:/storage
|
||||||
```
|
```
|
||||||
|
|
||||||
Replace the example path `/home/user/data` with the desired storage folder.
|
Replace the example path `/var/dsm` with the desired storage folder.
|
||||||
|
|
||||||
* ### How do I add multiple disks?
|
* ### How do I add multiple disks?
|
||||||
|
|
||||||
@ -170,7 +170,7 @@ docker run -it --rm -p 5000:5000 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti
|
|||||||
- 'c *:* rwm'
|
- 'c *:* rwm'
|
||||||
```
|
```
|
||||||
|
|
||||||
Please note that even if you don't need DHCP, it's still recommended to enable this feature as it prevents NAT issues and increases performance by using a `macvtap` interface.
|
Please note that even if you don't want DHCP, it's still recommended to enable this feature as it prevents NAT issues and increases performance by using a `macvtap` interface. In that case just set a static IP from the DSM control panel after you enabled this mode.
|
||||||
|
|
||||||
* ### How do I passthrough the GPU?
|
* ### How do I passthrough the GPU?
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ if [[ "$ARCH" == "amd64" && "$KVM" != [Nn]* ]]; then
|
|||||||
|
|
||||||
if [ -n "$KVM_OPTS" ]; then
|
if [ -n "$KVM_OPTS" ]; then
|
||||||
if ! grep -qE '^flags.* (sse4_2)' /proc/cpuinfo; then
|
if ! grep -qE '^flags.* (sse4_2)' /proc/cpuinfo; then
|
||||||
error "Your host CPU does not has the SSE4.2 instruction set that Virtual DSM requires to boot."
|
error "Your host CPU does not have the SSE4.2 instruction set that Virtual DSM requires to boot."
|
||||||
error "Disable KVM by setting KVM=N to emulate a compatible CPU, at the cost of performance."
|
error "Disable KVM by setting KVM=N to emulate a compatible CPU, at the cost of performance."
|
||||||
[[ "$DEBUG" != [Yy1]* ]] && exit 89
|
[[ "$DEBUG" != [Yy1]* ]] && exit 89
|
||||||
fi
|
fi
|
||||||
|
17
src/disk.sh
17
src/disk.sh
@ -3,11 +3,12 @@ set -Eeuo pipefail
|
|||||||
|
|
||||||
# Docker environment variables
|
# Docker environment variables
|
||||||
|
|
||||||
: ${DISK_IO:='native'} # I/O Mode, can be set to 'native', 'threads' or 'io_turing'
|
: ${DISK_IO:='native'} # I/O Mode, can be set to 'native', 'threads' or 'io_turing'
|
||||||
: ${DISK_FMT:='raw'} # Disk file format, 'raw' by default for best performance
|
: ${DISK_FMT:='raw'} # Disk file format, 'raw' by default for best performance
|
||||||
: ${DISK_CACHE:='none'} # Caching mode, can be set to 'writeback' for better performance
|
: ${DISK_CACHE:='none'} # Caching mode, can be set to 'writeback' for better performance
|
||||||
: ${DISK_DISCARD:='on'} # Controls whether unmap (TRIM) commands are passed to the host.
|
: ${DISK_DISCARD:='on'} # Controls whether unmap (TRIM) commands are passed to the host.
|
||||||
: ${DISK_ROTATION:='1'} # Rotation rate, set to 1 for SSD storage and increase for HDD
|
: ${DISK_ROTATION:='1'} # Rotation rate, set to 1 for SSD storage and increase for HDD
|
||||||
|
: ${DISK_FLAGS:='nocow=on'} # Specify the options for use with the qcow2 format
|
||||||
|
|
||||||
BOOT="$STORAGE/$BASE.boot.img"
|
BOOT="$STORAGE/$BASE.boot.img"
|
||||||
SYSTEM="$STORAGE/$BASE.system.img"
|
SYSTEM="$STORAGE/$BASE.system.img"
|
||||||
@ -137,12 +138,12 @@ convertDisk() {
|
|||||||
|
|
||||||
case "$DST_FMT" in
|
case "$DST_FMT" in
|
||||||
qcow2)
|
qcow2)
|
||||||
CONV_FLAGS="$CONV_FLAGS -c"
|
CONV_FLAGS="$CONV_FLAGS -c -o $DISK_FLAGS"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
qemu-img convert $CONV_FLAGS -f "$SOURCE_FMT" -O "$DST_FMT" -- "$SOURCE_FILE" "$DST_FILE"
|
qemu-img convert -f "$SOURCE_FMT" $CONV_FLAGS -O "$DST_FMT" -- "$SOURCE_FILE" "$DST_FILE"
|
||||||
}
|
}
|
||||||
|
|
||||||
createDisk() {
|
createDisk() {
|
||||||
@ -186,7 +187,7 @@ createDisk() {
|
|||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
qcow2)
|
qcow2)
|
||||||
if ! qemu-img create -f "$DISK_FMT" -- "$DISK_FILE" "$DISK_SPACE" ; then
|
if ! qemu-img create -f "$DISK_FMT" -o "$DISK_FLAGS" -- "$DISK_FILE" "$DISK_SPACE" ; then
|
||||||
rm -f "$DISK_FILE"
|
rm -f "$DISK_FILE"
|
||||||
error "$FAIL" && exit 70
|
error "$FAIL" && exit 70
|
||||||
fi
|
fi
|
||||||
|
@ -5,8 +5,8 @@ set -Eeuo pipefail
|
|||||||
|
|
||||||
QEMU_PORT=7100
|
QEMU_PORT=7100
|
||||||
QEMU_TIMEOUT=50
|
QEMU_TIMEOUT=50
|
||||||
QEMU_PID=/run/qemu.pid
|
QEMU_PID="/run/qemu.pid"
|
||||||
QEMU_COUNT=/run/qemu.count
|
QEMU_COUNT="/run/qemu.count"
|
||||||
|
|
||||||
rm -f "$QEMU_PID"
|
rm -f "$QEMU_PID"
|
||||||
rm -f "$QEMU_COUNT"
|
rm -f "$QEMU_COUNT"
|
||||||
|
@ -7,6 +7,7 @@ error () { printf "%b%s%b" "\E[1;31m❯ " "ERROR: $1" "\E[0m\n" >&2; }
|
|||||||
file="/run/dsm.url"
|
file="/run/dsm.url"
|
||||||
shutdown="/run/qemu.count"
|
shutdown="/run/qemu.count"
|
||||||
url="http://127.0.0.1:2210/read?command=10"
|
url="http://127.0.0.1:2210/read?command=10"
|
||||||
|
|
||||||
resp_err="Guest returned an invalid response:"
|
resp_err="Guest returned an invalid response:"
|
||||||
jq_err="Failed to parse response from guest: jq error"
|
jq_err="Failed to parse response from guest: jq error"
|
||||||
|
|
||||||
@ -19,8 +20,6 @@ do
|
|||||||
sleep 3
|
sleep 3
|
||||||
|
|
||||||
[ -f "$shutdown" ] && exit 1
|
[ -f "$shutdown" ] && exit 1
|
||||||
|
|
||||||
# Healthcheck may have intervened
|
|
||||||
[ -f "$file" ] && break
|
[ -f "$file" ] && break
|
||||||
|
|
||||||
# Retrieve IP from guest VM
|
# Retrieve IP from guest VM
|
||||||
|
@ -43,6 +43,7 @@ rm -f /run/qemu.count
|
|||||||
# Cleanup dirs
|
# Cleanup dirs
|
||||||
|
|
||||||
rm -rf /tmp/dsm
|
rm -rf /tmp/dsm
|
||||||
|
rm -f /tmp/server.*
|
||||||
rm -rf "$STORAGE/tmp"
|
rm -rf "$STORAGE/tmp"
|
||||||
|
|
||||||
# Helper functions
|
# Helper functions
|
||||||
|
Loading…
x
Reference in New Issue
Block a user