mirror of
				https://github.com/vdsm/virtual-dsm.git
				synced 2025-11-04 08:54:51 +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:
 | 
			
		||||
            - 5000:5000
 | 
			
		||||
        volumes:
 | 
			
		||||
            - /opt/dsm:/storage
 | 
			
		||||
            - /var/dsm:/storage
 | 
			
		||||
        restart: on-failure
 | 
			
		||||
        stop_grace_period: 2m
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										10
									
								
								readme.md
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								readme.md
									
									
									
									
									
								
							@ -39,7 +39,7 @@ services:
 | 
			
		||||
    ports:
 | 
			
		||||
      - 5000:5000
 | 
			
		||||
    volumes:
 | 
			
		||||
      - /opt/dsm:/storage
 | 
			
		||||
      - /var/dsm:/storage
 | 
			
		||||
    restart: on-failure
 | 
			
		||||
    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?
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
    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?
 | 
			
		||||
 | 
			
		||||
@ -170,7 +170,7 @@ docker run -it --rm -p 5000:5000 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti
 | 
			
		||||
      - '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?
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -31,7 +31,7 @@ if [[ "$ARCH" == "amd64" && "$KVM" != [Nn]* ]]; then
 | 
			
		||||
 | 
			
		||||
  if [ -n "$KVM_OPTS" ]; 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."
 | 
			
		||||
      [[ "$DEBUG" != [Yy1]* ]] && exit 89
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										17
									
								
								src/disk.sh
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								src/disk.sh
									
									
									
									
									
								
							@ -3,11 +3,12 @@ set -Eeuo pipefail
 | 
			
		||||
 | 
			
		||||
# Docker environment variables
 | 
			
		||||
 | 
			
		||||
: ${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_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_ROTATION:='1'}   # Rotation rate, set to 1 for SSD storage and increase for HDD
 | 
			
		||||
: ${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_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_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"
 | 
			
		||||
SYSTEM="$STORAGE/$BASE.system.img"
 | 
			
		||||
@ -137,12 +138,12 @@ convertDisk() {
 | 
			
		||||
 | 
			
		||||
  case "$DST_FMT" in
 | 
			
		||||
    qcow2)
 | 
			
		||||
      CONV_FLAGS="$CONV_FLAGS -c"
 | 
			
		||||
      CONV_FLAGS="$CONV_FLAGS -c -o $DISK_FLAGS"
 | 
			
		||||
      ;;
 | 
			
		||||
  esac
 | 
			
		||||
 | 
			
		||||
  # 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() {
 | 
			
		||||
@ -186,7 +187,7 @@ createDisk() {
 | 
			
		||||
      fi
 | 
			
		||||
      ;;
 | 
			
		||||
    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"
 | 
			
		||||
        error "$FAIL" && exit 70
 | 
			
		||||
      fi
 | 
			
		||||
 | 
			
		||||
@ -5,8 +5,8 @@ set -Eeuo pipefail
 | 
			
		||||
 | 
			
		||||
QEMU_PORT=7100
 | 
			
		||||
QEMU_TIMEOUT=50
 | 
			
		||||
QEMU_PID=/run/qemu.pid
 | 
			
		||||
QEMU_COUNT=/run/qemu.count
 | 
			
		||||
QEMU_PID="/run/qemu.pid"
 | 
			
		||||
QEMU_COUNT="/run/qemu.count"
 | 
			
		||||
 | 
			
		||||
rm -f "$QEMU_PID"
 | 
			
		||||
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"
 | 
			
		||||
shutdown="/run/qemu.count"
 | 
			
		||||
url="http://127.0.0.1:2210/read?command=10"
 | 
			
		||||
 | 
			
		||||
resp_err="Guest returned an invalid response:"
 | 
			
		||||
jq_err="Failed to parse response from guest: jq error"
 | 
			
		||||
 | 
			
		||||
@ -19,8 +20,6 @@ do
 | 
			
		||||
  sleep 3
 | 
			
		||||
 | 
			
		||||
  [ -f "$shutdown" ] && exit 1
 | 
			
		||||
 | 
			
		||||
  # Healthcheck may have intervened
 | 
			
		||||
  [ -f "$file" ] && break
 | 
			
		||||
 | 
			
		||||
  # Retrieve IP from guest VM
 | 
			
		||||
 | 
			
		||||
@ -43,6 +43,7 @@ rm -f /run/qemu.count
 | 
			
		||||
# Cleanup dirs
 | 
			
		||||
 | 
			
		||||
rm -rf /tmp/dsm
 | 
			
		||||
rm -f /tmp/server.*
 | 
			
		||||
rm -rf "$STORAGE/tmp"
 | 
			
		||||
 | 
			
		||||
# Helper functions
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user