You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

285 lines
10 KiB
Markdown

3 years ago
# Mass Storage Drive
3 years ago
## Basics
3 years ago
This is a feature available on PiKVM v2+ that allows you to emulate a CD-ROM or Flash Drive.
3 years ago
3 years ago
There are some subtleties that you should know:
3 years ago
!!! info "The size of the CD-ROM image is limited to 2.2 GB"
This is a [limitation](https://github.com/pikvm/pikvm/issues/322) of the Linux kernel, which currently cannot emulate a DVD.
To use a larger boot image, use Flash emulation. If this is not possible (the image does not support Flash, for example, for Windows),
use [this](#create-a-microsoft-windows-based-flash-disk-image) recipe.
!!! info "Changing the media type between CD-ROM and Flash is possible only when the device is reconnected"
For PiKVM v3 HAT, this can be done using the switch `System -> Connect main USB`.
In this case, the **media type is determined at the time of connecting the image, and not by clicking on the switch**.
The switch affects the settings of the future connection. For non-v3 devices,
you need to either reboot your server or otherwise reinitialize the connection.
-----
## Disable MSD
To disable mass storage emulation altogether, you can place the following piece of configuration into `/etc/kvmd/override.yaml`:
3 years ago
``` yaml
3 years ago
kvmd:
msd:
type: disabled
3 years ago
```
3 years ago
## Upload images manually (without Web UI)
3 years ago
1. Remount internal storage to rw (read-write):
3 years ago
3 years ago
```
# kvmd-helper-otgmsd-remount rw
```
3 years ago
3 years ago
2. Upload the .ISO image(s) to `/var/lib/kvmd/msd/images` via scp or similar.
3 years ago
3 years ago
3. Create an empty file in `/var/lib/kvmd/msd/meta/` with the exact name (case sensitive!) of the uploaded image. This will indicate PiKVM that the uploaded image is okay and can be used. For example:
3 years ago
3 years ago
```
/var/lib/kvmd/msd/meta/ubuntu-18.04.4-desktop-amd64.iso.complete
3 years ago
3 years ago
```
3 years ago
3 years ago
4. Remount internal storage back to ro (read-only):
3 years ago
3 years ago
```
# kvmd-helper-otgmsd-remount ro
```
3 years ago
-----
## Multiple and writable drives
3 years ago
Unless explicitly [disabled](#disable-msd) by default, PiKVM creates only one drive for Mass Storage emulation.
3 years ago
However, you can create additional drives and manage them manually via the terminal.
This is useful if you want to boot the server from a ISO CD (specified in the web interface), then connect a virtual flash drive
3 years ago
to the server and download some files from to PiKVM from it.
3 years ago
3 years ago
!!! info
The presence of an additional Mass Storage Drive should not interfere with the boot, but for reasons of compatibility paranoia, this is disabled by default. We recommend setting up the drives in advance, making sure that booting from the ISO CD is still working, and then using the drives as needed.
### How to enable extra drives
3 years ago
1. Switch the root filesystem to `rw` mode.
3 years ago
2. Edit `/etc/kvmd/override.yaml` and add these lines:
3 years ago
``` yaml
otg:
devices:
drives:
enabled: true # Set it to true to enable
count: 1 # +1 drive, default value
default: # Default configuration for the all extra drives
cdrom: false # Default value (false for the generic flash drive)
rw: false # Read-only by default
```
3 years ago
3 years ago
If you specify `count: N`, you will create `N` additional drives configured the same way, as described in the `default` section.
3 years ago
3. Perform `reboot`.
### How to create RW flash drive
3 years ago
1. Switch the root filesystem to `rw` mode:
3 years ago
3 years ago
```
# rw
```
3 years ago
3 years ago
2. Create the empty image file of the desire size (1Gb in this example).
3 years ago
3 years ago
```
# dd if=/dev/zero of=/root/flash.img bs=1M count=1000 status=progress
```
3 years ago
3 years ago
3. Connect it to the drive 1:
3 years ago
3 years ago
```
# kvmd-otgmsd -i 1 --set-rw=1 --set-cdrom=0 --set-image=/root/flash.img
```
3 years ago
After that you will have access to the flash drive from the server. **Drive 0 represents a drive that is controlled via a web interface and API. Don't use it with kvmd-otgmsd if you don't know exactly what you're doing.**
3 years ago
4. View the driver state:
3 years ago
3 years ago
```
# kvmd-otgmsd -i 1
Image file: /root/flash.img
CD-ROM flag: no
RW flag: yes
3 years ago
```
3 years ago
5. To disable the flash drive and view the files on it from the KVM, run:
3 years ago
3 years ago
```
# kvmd-otgmsd -i 1 --unlock --eject
```
3 years ago
**This command will interrupt the current IO operation on ALL DRIVES** including the one that is managed via the web interface. The same result is achieved by clicking the disable media button in the web interface. Right now, the Linux kernel does not allow to distinguish between internal threads that manage different drives. It is recommended to eject the media when you know that this will not cause problems for the other media.
3 years ago
6. Don't forget to remount the root filesystem to read-only mode:
3 years ago
3 years ago
```
# ro
```
3 years ago
3 years ago
7. You can download the resulting image via SCP or mount it as a loop device on the PiKVM.
3 years ago
3 years ago
-----
## Create a Windows based Flash disk image
An alternative version of this can be found below that does not require a physical usb flash
3 years ago
This procedure will create a disk image of a USB stick. This is mostly required for Windows based images since they are larger than the CDROM based limit of 2.2GB.
3 years ago
You can create a bootable USB stick with the normal Microsoft tools, e.g. Media Creation Tool.
Creating a bootable USB stick can also be made from an ISO file with other tools like Rufus.
Without resizing, the full size of the USB stick will be used, so keep the stick as small as possible (e.g. 4GB or 8GB) but still large enough for all Windows files. The Media Creation tool will tell you what the minimum size is.
Before creating the image file, you can use a tool like "EaseUS Partition Master Free" or "GParted" to resize the main FAT32 partition on the USB stick. This will save space on PiKVM.
You can also perform these steps on a separate unix machine and transfer the image over to pikvm with e.g. SCP.
Or, on Windows you could use a program like PassMark ImageUSB (only for full USB size images) or 'dd' for Windows to create the image. Then use WinSCP to transfer the image over to PiKVM.
Once you have the desired USB stick perform the following on the RPi to create the image directly to the PiKVM image storage folder.
1. Insert Windows based USB stick into Pi4, generated with Microsoft USB creation tool. SSH to PiKVM as root.
3 years ago
3 years ago
```
# dmesg
[ 3025.025401] usb-storage 2-1:1.0: USB Mass Storage device detected
[ 3025.038911] scsi host0: usb-storage 2-1:1.0
[ 3026.132248] scsi 0:0:0:0: Direct-Access Kingston DataTraveler 3.0 PMAP PQ: 0 ANSI: 6
[ 3026.771425] sd 0:0:0:0: [sda] 15360000 512-byte logical blocks: (7.86 GB/7.32 GiB)
[ 3026.790276] sd 0:0:0:0: [sda] Write Protect is off
[ 3026.802530] sd 0:0:0:0: [sda] Mode Sense: 23 00 00 00
[ 3026.804450] sd 0:0:0:0: [sda] No Caching mode page found
[ 3026.814082] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 3026.908712] sda: sda1
[ 3026.922794] sd 0:0:0:0: [sda] Attached SCSI removable disk
[root@pikvm ~]#
```
3 years ago
USB devices shows as `sda`. We will use `sda1` as the Windows partition.
3 years ago
2. mount msd folder as read/write
3 years ago
3 years ago
```
# kvmd-helper-otgmsd-remount rw
```
3 years ago
3 years ago
3. Create image of USB data PARTITION to an image file, this will take some time, in this case about 12 minutes (RPi4).
3 years ago
3 years ago
```
# dd if=/dev/sda1 of=/var/lib/kvmd/msd/images/windows10-2004.bin bs=8M status=progress
4458545152 bytes (4.5 GB, 4.2 GiB) copied, 736 s, 6.1 MB/s
531+1 records in
531+1 records out
4458545152 bytes (4.5 GB, 4.2 GiB) copied, 736.213 s, 6.1 MB/s
3 years ago
```
3 years ago
4. Correct ownership of new image and make sure the website reports the file as complete (pay attention to the different folder).
3 years ago
3 years ago
```
# chown kvmd:kvmd /var/lib/kvmd/msd/images/windows10-2004.bin
# touch /var/lib/kvmd/msd/meta/windows10-2004.bin.complete
```
3 years ago
3 years ago
5. Remount msd folder as read only
3 years ago
3 years ago
```
# kvmd-helper-otgmsd-remount ro
3 years ago
```
3 years ago
6. On PiKVM webpage, under Storage select the new image and connect it in Drive Mode: Flash to the server.
3 years ago
Boot the server and select boot device like you normally would.
E.g. in a AMI BIOS the boot device is called "Linux File-CD Gadget 0504".
-----
## Create a drive image on macOS
3 years ago
1. Open Disk Utility.
3 years ago
2. `File > New Image > Blank Image`.
3 years ago
3. Save As: `pikvm-image.dmg`. Name: `pikvm-image`. Size: 100 MB (or whatever size you want). Format: `MS-DOS (FAT)`. Partitions: `Single partition - GUID Partition Map`. Image Format: `read/write disk image`.
4. Click Save.
5. The drive will automatically be mounted.
6. Copy files (such as BIOS updates) onto the new image (via terminal or drag and drop in Finder).
7. Eject image.
3 years ago
8. Upload image to PiKVM interface under "Drive".
3 years ago
9. Select Drive Mode: `Flash` and then `Connect drive to Server`.
You should be able to then mount it locally on the server, or reboot the device to do things like BIOS updates.
3 years ago
-----
## An alternative to making a Windows boot image that does not require a physical usb flash drive
* Physical USB is not needed but external system is mandatory.
* Create Ventoy image (on Ubuntu x86 machine) (Unaware of a windows version).
```
dd if=/dev/zero of=ventoy.img bs=1M count=4700 status=progress
```
3 years ago
* This makes a ventoy.img file, I would name this what it is EG: `ventoy_win10.img`
* At the same time, download Media Creation Tool and select iso
3 years ago
* On the Ubuntu machine
* At the time of this, it was 1.0.51, change to latest version
```
wget https://github.com/ventoy/Ventoy/releases/download/v1.0.51/ventoy-1.0.51-linux.tar.gz
tar zxvf ventoy-1.0.51-linux.tar.gz
sudo losetup -f ventoy.img
sudo losetup -l | grep ventoy (To locate which loop device was used)
sudo losetup /dev/loopXX ventoy.img
sudo sh ~/ventoy-1.0.51/Ventoy2Disk.sh -i /dev/loopXX (This will make a loopXXp1 and a loopXXp2 and will format both partitions
cd /media/XXX (Usually your login)
mkdir ventoy
sudo mount /dev/loopXXp1 /media/XXX/ventoy
```
3 years ago
* Either cp/scp over the .iso you downloaded from the Media tool or use a NFS mount
```
sudo cp windows.iso /media/XXX/ventoy
sudo umount /dev/loopXX
sudo losetup -d /dev/loopXX
```
ssh into the Ubuntu system (Or whatever OS you are using)
3 years ago
* On PiKVM
```
cd /var/lib/kvmd/msd
mount -o remount,rw .
```
3 years ago
* On Ubuntu
```
scp ventoy.img root@pikvm:/var/lib/kvmd/msd/images
```
3 years ago
* On PiKVM
```
touch /var/lib/kvmd/msd/meta/ventoy.img.complete
```
3 years ago
* Mount `ventoy.img` as normal flash and select the PiKVM boot device, it should popup with the VenToy logo with the window.iso as a selection