mirror of
https://github.com/Wind4/vlmcsd.git
synced 2024-11-28 21:11:03 +08:00
531 lines
24 KiB
Plaintext
531 lines
24 KiB
Plaintext
VLMCSD-FLOPPY(7) KMS Activation Manual VLMCSD-FLOPPY(7)
|
||
|
||
|
||
|
||
NAME
|
||
floppy144.vfd - a bootable floppy disk with Linux and vlmcsd(8)
|
||
|
||
|
||
DESCRIPTION
|
||
floppy144.vfd is an image of a bootable floppy that contains a minimal
|
||
version of Linux and vlmcsd(8). It requires only 16 MB of RAM. Its pri‐
|
||
mary purpose is to run vlmcsd(8) in a small virtual machine which makes
|
||
it easy to use vlmcsd(8) to activate the virtual machine's host com‐
|
||
puter which is not possible in Windows 8.1 and up. The floppy image is
|
||
a standard 3,5" floppy with 1.44 MB storage. It is formatted with a
|
||
FAT12 filesystem. The floppy can be mounted to apply several customiza‐
|
||
tions.
|
||
|
||
|
||
SUPPORTED HYPERVISORS
|
||
The floppy image has been tested with the following hypervisors:
|
||
|
||
VMWare, VirtualBox, Hyper-V and QEMU
|
||
|
||
Others are likely to work.
|
||
|
||
|
||
SETUP
|
||
Create a new virtual machine. Assign 16 MB of RAM. Add a floppy drive
|
||
and attach floppy144.vfd to this drive. Do not create a virtual hard
|
||
disk. Setup the virtual machine to boot from a floppy drive (VirtualBox
|
||
has floppy boot disabled by default). If possible, setup a virtual
|
||
machine with plain old BIOS (not UEFI). If you created an UEFI virtual
|
||
machine, enable the compatibility support mode (CSM) to allow a BIOS
|
||
compatible boot. Set number of CPUs to 1. The Linux kernel is not capa‐
|
||
ble of SMP. Remove IDE, SATA, SCSI and USB support if possible. The
|
||
Linux kernel can't handle this and ignores any devices connected to
|
||
these buses.
|
||
|
||
Setup an ethernet card. The following models are supported:
|
||
|
||
Intel PRO/1000
|
||
AMD PCNET III
|
||
AMD PCNET32
|
||
VMWare vmxnet3 (paravirtualized driver used by VMWare)
|
||
virtio (paravirtualized driver used by VirtualBox, QEMU, KVM and
|
||
lguest)
|
||
|
||
Most hypervisors emulate an Intel PRO/1000 or AMD PCNET32 by default.
|
||
Selecting a paravirtualized driver slightly improves performance. In
|
||
VirtualBox you can simply select virtio in the network configuration
|
||
dialog. VMWare requires that you add or change the VMX file. Use 'eth‐
|
||
ernet0.virtualDev = "vmxnet3"' in your VMWare config file.
|
||
|
||
If you are using QEMU, you must also setup a TAP adapter. Port redi‐
|
||
rection does not work to activate your own computer.
|
||
|
||
|
||
CONFIGURATION
|
||
floppy144.vfd can be customized to fit your needs. This is done by
|
||
editing the file syslinux.cfg on the floppy image. The floppy image
|
||
must be mounted. Under Linux you can simply attach floppy144.vfd to a
|
||
loop device which is mountable like any other block device. For Windows
|
||
you must use some software that allows mounting a floppy image, e.g.
|
||
OSFMount ⟨http://www.osforensics.com/tools/mount-disk-images.html⟩
|
||
|
||
OSFMount works under all Windows versions beginning with Windows XP up
|
||
to Windows 10 (32- and 64-bit).
|
||
|
||
The default syslinux.cfg file looks like this:
|
||
|
||
prompt 0
|
||
TIMEOUT 50
|
||
default dhcp
|
||
|
||
LABEL dhcp
|
||
KERNEL bzImage
|
||
APPEND vga=773 quiet initrd=initrd KBD=us LIS‐
|
||
TEN=[::]:1688,0.0.0.0:1688 TZ=UTC0 IPV4_CONFIG=DHCP
|
||
NTP_SERVER=pool.ntp.org HOST_NAME=vlmcsd ROOT_PASSWORD=vlmcsd
|
||
USER_NAME=user USER_PASSWORD=vlmcsd GUEST_PASSWORD=vlmcsd
|
||
INETD=Y WINDOWS=06401-00206-271-395032-03-1033-9600.0000-1652016
|
||
OFFICE2010=06401-00096-199-204970-03-1033-9600.0000-1652016
|
||
OFFICE2013=06401-00206-234-921934-03-1033-9600.0000-1652016
|
||
HWID=36:4F:46:3A:88:63:D3:5F
|
||
|
||
LABEL static
|
||
KERNEL bzImage
|
||
APPEND vga=773 quiet initrd=initrd KBD=fr LIS‐
|
||
TEN=[::]:1688,0.0.0.0:1688 TZ=CET-1CEST,M3.5.0,M10.5.0/3
|
||
IPV4_CONFIG=STATIC IPV4_ADDRESS=192.168.20.123/24 IPV4_GATE‐
|
||
WAY=192.168.20.2 IPV4_DNS1=192.168.20.2 IPV4_DNS2=NONE
|
||
NTP_SERVER=pool.ntp.org HOST_NAME=vlmcsd ROOT_PASSWORD=vlmcsd
|
||
USER_NAME=user USER_PASSWORD=vlmcsd GUEST_PASSWORD=vlmcsd
|
||
INETD=Y
|
||
|
||
|
||
There are two configurations in this files: dhcp (for configuring the
|
||
IPv4 network via DHCP) and static (for a static IPv4 configuration).
|
||
The kernel always boots the dhcp configuration without asking (lines
|
||
'prompt 0' and 'default dhcp'). You can simply change the default con‐
|
||
figuration to static and then customize the APPEND line in the static
|
||
configuration. For more details how to customize the syslinux.cfg file
|
||
see syslinux(1).
|
||
|
||
Each APPPEND line contains one or more items seperated by spaces. All
|
||
items are case-sensitive. The following parameters can be customized:
|
||
|
||
|
||
vga=vesa-video-mode
|
||
Sets the VESA display mode for the virtual machine. The parame‐
|
||
ter is not optional. If you ommit it, you will not see anything
|
||
on the screen. 773 means 1024x768 with 256 colors. See Wikipedia
|
||
⟨https://en.wikipedia.org/wiki/
|
||
VESA_BIOS_Extensions#Linux_video_mode_numbers⟩ for more video
|
||
modes. Note that all 16 color (4-bit) modes will not work. Use
|
||
8-bit (256 colors), 16-bit (65536 colors), 24-bit and 32-bit (>
|
||
16 Million colors) only. All modes above 1280x1024 are non-VESA-
|
||
standard and vary for all (virtual) graphic cards.
|
||
|
||
|
||
quiet This causes the kernel not display the its log during boot. You
|
||
may omit quiet but it doesn't make much sense. The boot log is
|
||
actually very verbose and scrolls away from screen quickly. If
|
||
any errors occur during boot, they will be displayed even if
|
||
quiet is present in the APPEND line. You may evaluate the com‐
|
||
plete boot log later by using the dmesg command or the menu on
|
||
/dev/tty8.
|
||
|
||
|
||
initrd=initial-ram-disk-file
|
||
This defines the initial ram disk that the kernel will read.
|
||
There is only one initial ram disk on the floppy thus leave ini‐
|
||
trd=initrd as it is.
|
||
|
||
|
||
KBD=keyboard-layout-name
|
||
This allows you to select the keyboard layout. keyboard-layout-
|
||
name is usually the ISO 3166-1 (top level domain) code for a
|
||
country. A list of valid keyboard-layout-names can be accessed
|
||
via the menu system on /dev/tty8 (press ALT-F8). Note, that this
|
||
is a keyboard driver only. There is no Unicode font support in
|
||
floppy144.vfd (due to the fact that the kernel uses a generic
|
||
VESA framebuffer device only). Characters beyond ASCII work for
|
||
Western European languages only but not Eastern European, Greek,
|
||
Cyrillic, Arabic, Hebrew, CJK and other languages. There is no
|
||
need in floppy144.vfd to enter any characters outside ASCII. The
|
||
purpose of the keyboard maps are that you will find characters
|
||
like dash, backslash, brackets, braces, etc. at the usual place
|
||
on your keyboard.
|
||
|
||
|
||
LISTEN=PRIVATE[:tcp-port] | ip-address[:tcp-port][,ip-address[:tcp-
|
||
port]][,...]
|
||
One or more combinations of IP addresses and optional TCP port
|
||
seperated by commas that vlmcsd(8) should listen on or PRIVATE
|
||
to listen on all private IP addresses only. The default port is
|
||
1688. If you use an explicit port number, append it to the IP
|
||
address seperated by a colon. If you use a port number and the
|
||
IP address contains colons, you must enclose the IP address in
|
||
brackets. For example 192.168.0.2,[fd00::dead:beef]:5678 causes
|
||
vlmcsd(8) to listen on 192.168.0.2 port 1688 and fd00::dead:beef
|
||
port 5678.
|
||
|
||
|
||
WINDOWS=epid
|
||
Defines the ePID that is used for Windows activations. If you
|
||
ommit this parameter, vlmcsd generates a random ePID when it is
|
||
started.
|
||
|
||
|
||
OFFICE2010=epid
|
||
Defines the ePID that is used for Office 2010 activations. If
|
||
you ommit this parameter, vlmcsd(8) generates a random ePID when
|
||
it is started.
|
||
|
||
|
||
OFFICE2013=epid
|
||
Defines the ePID that is used for Office (versions 2013 and
|
||
greater) activations. If you ommit this parameter, vlmcsd(8)
|
||
generates a random ePID when it is started.
|
||
|
||
|
||
HWID=hwid
|
||
Defines the HwId that is sent to clients. hwid must be specified
|
||
as 16 hex digits that are interpreted as a series of 8 bytes
|
||
(big endian). Any character that is not a hex digit will be
|
||
ignored. This is for better readability.
|
||
|
||
|
||
TZ=posix-time-zone-string
|
||
Set the time zone to posix-time-zone-string. It must conform to
|
||
the POSIX ⟨http://pubs.opengroup.org/onlinepubs/009695399/
|
||
basedefs/xbd_chap08.html⟩ specification. Simplified time zone
|
||
strings like "Europe/London" or "America/Detroit" are not
|
||
allowed. This has the very simple reason that there is no space
|
||
on the floppy to store the time zone database.
|
||
|
||
The string CET-1CEST,M3.5.0,M10.5.0/3 (most countries in Europe)
|
||
reads as follows:
|
||
|
||
CET The standard (winter) time zone has the name CET.
|
||
|
||
-1 The standard time zone is one hour east of UTC. Nega‐
|
||
tive numbers are east of UTC. Positive numbers are
|
||
west of UTC.
|
||
|
||
CEST The daylight saving (summer) time zone has the name
|
||
CEST.
|
||
|
||
M3.5.0 Daylight saving time starts in the 3rd month (March)
|
||
on the 5th (=last) occurence of weekday 0 (Sunday) at
|
||
2 o'clock (2 o'clock is a default value).
|
||
|
||
M10.5.0/3 Daylight saving time ends in the 10th month (October)
|
||
on the 5th (=last) occurence of weekday 0 (Sunday) at
|
||
3 o'clock.
|
||
|
||
If you don't have daylight saving time, things are easier. For
|
||
Chinese Standard Time for example, just use CST-8 as the time
|
||
zone string.
|
||
|
||
On a Linux desktop system, you can use a command like
|
||
strings /usr/share/zoneinfo/America/New_York | tail -n1. This
|
||
should return EST5EDT,M3.2.0,M11.1.0. You can use the returned
|
||
string for the TZ=posix-time-zone-string parameter.
|
||
|
||
|
||
IPV4_CONFIG=DHCP | STATIC
|
||
This determines how you want to configure IPv4 networking. If
|
||
you use IPV4_CONFIG=STATIC, you must supply additional para‐
|
||
maters to the APPEND command line.
|
||
|
||
|
||
IPV4_ADDRESS=ipv4-address/CIDR-mask
|
||
Use ipv4-address with netmask CIDR-mask for static IPv4 configu‐
|
||
ration. The netmask must not be ommitted. For IPv4 address
|
||
192.168.12.17 with a netmask of 255.255.255.0 use
|
||
192.168.12.17/24. For IPv4 address 10.4.0.8 with a netmask of
|
||
255.255.0.0 use 10.4.0.8/16. This paramater is ignored, if you
|
||
used IPV4_CONFIG=DHCP.
|
||
|
||
|
||
IPV4_GATEWAY=ipv4-address | NONE
|
||
Use ipv4-address as the default gateway. This is usually the
|
||
IPv4 address of your router. You may specify NONE explicitly for
|
||
no gateway. In this case your virtual machine is only visible on
|
||
its local LAN. This paramater is ignored, if you used IPV4_CON‐
|
||
FIG=DHCP.
|
||
|
||
|
||
IPV4_DNS1=ipv4-address | NONE
|
||
Use ipv4-address as the primary name server. In home networks
|
||
this is often the IPv4 address of your router. You may specify
|
||
NONE explicitly. If you specified NONE for both IPV4_DNS1= and
|
||
IPV4_DNS2=, your virtual machine cannot resolve host names to IP
|
||
addresses. While vlmcsd(8) works perfectly without DNS servers,
|
||
you must use IP addresses when referring to a host, e.g. for
|
||
specifying an NTP server. This paramater is ignored, if you used
|
||
IPV4_CONFIG=DHCP.
|
||
|
||
|
||
IPV4_DNS2=ipv4-address | NONE
|
||
Use ipv4-address as the secondary name server. It serves as a
|
||
backup if the primary name server is not available. Home net‐
|
||
works often don't have a secondary name server. In this case set
|
||
this to NONE. This paramater is ignored, if you used IPV4_CON‐
|
||
FIG=DHCP.
|
||
|
||
|
||
NTP_SERVER=host-name | ipv4-address | NONE
|
||
This sets the name of a time server using the NTP protocol. If
|
||
your virtualization environment reliably provides time, you can
|
||
set this to NONE. Don't use a public time service like
|
||
pool.ntp.org or time.nist.gov if you have a (at least somewhat
|
||
reliable) NTP server in your LAN.
|
||
|
||
|
||
HOST_NAME=host-name
|
||
Sets the local host name for your virtual machine. It can be a
|
||
single name or a fully-qualified domain name FQDN. If you used
|
||
IPV4_CONFIG=DHCP and your DHCP server returns a domain name, the
|
||
domain part of an FQDN will be replaced by that name. This host
|
||
name or host part of an FQDN will not replaced by a host name
|
||
returned via DHCP. The host name is not important for the opera‐
|
||
tion of floppy144.vfd.
|
||
|
||
|
||
ROOT_PASSWORD=password
|
||
Sets the password of the root user.
|
||
|
||
|
||
USER_NAME=username
|
||
Sets the name of for a general user with no special privileges.
|
||
This user can login but can't do much.
|
||
|
||
|
||
USER_PASSWORD=password
|
||
Sets the password for the user defined by USER_NAME=username.
|
||
|
||
|
||
GUEST_PASSWORD=password
|
||
Sets the password for the pre-defined guest user. This user has
|
||
the same priviliges (none) as the user defined by
|
||
USER_NAME=username.
|
||
|
||
|
||
INETD=Y | N
|
||
INETD=Y specifies that inetd(8) should automatically be started.
|
||
That means you can telnet and ftp to your virtual machine.
|
||
|
||
|
||
OPERATION
|
||
Diskless System
|
||
The floppy144.vfd virtual machine is a diskless system that works
|
||
entirely from RAM. The file system is actually a RAM disk that is cre‐
|
||
ated from the initrd(4) file on the floppy image.
|
||
|
||
Anything you'll do from inside the virtual machine, for instance edit‐
|
||
ing a config file, will be lost when you reboot the machine. So, if you
|
||
ever asked yourself if rm -fr / (root privileges required) really
|
||
deletes all files from all mounted partitions, the floppy144.vfd VM is
|
||
the right place to test it (Yes, it does).
|
||
|
||
The VM uses a RAM disk, because the Linux kernel had to be stripped
|
||
down to essential features to fit on a 1.44 MB floppy. It has no floppy
|
||
driver, no disk file system drivers and no block layer (cannot use
|
||
disks of any type).
|
||
|
||
|
||
System startup
|
||
The kernel boots up very quickly and the init script (/sbin/init) waits
|
||
5 seconds. In these 5 seconds you can:
|
||
|
||
Press 'm' to manually enter the time zone and the IPv4 parame‐
|
||
ters. These will be queried interactively.
|
||
Press 't' to manually enter the time zone only.
|
||
Press 's' to escape to a shell.
|
||
|
||
If you don't want to 5 seconds for continuing the init process, you can
|
||
press any other key to speed things up. At the end of the init script
|
||
you should see thatvlmcsd(8) has started. You should also see the IP
|
||
addresses and all user names and passwords.
|
||
|
||
|
||
Logging into the system
|
||
There are 5 local logins provided on /dev/tty2 to /dev/tty6. To switch
|
||
to these logins, simply press ALT-F2 to ALT-F6. To return to the con‐
|
||
sole on /dev/tty1, press ALT-F1. If inetd(8) is running you can also
|
||
use telnet(1). This allows you use a terminal program (e.g. putty) that
|
||
can utilize your keyboard layout, can be resized and has full UTF-8
|
||
support. The local terminals support US keyboard layout only. Please be
|
||
aware that telnet(1) is unencrypted and everything including passwords
|
||
is transmitted in clear text. There is not enough space for an ssh
|
||
server like sshd(8) or dropbear(8).
|
||
|
||
The floppy image only provides basic Unix commands. Type busybox or ll
|
||
/bin to get a list. The only editor available is vi(1). If you don't
|
||
like vi, you may transfer config files via ftp(1) edit them with the
|
||
editor of your choice and transfer them back to the floppy144.vfd VM.
|
||
|
||
|
||
The menu system
|
||
You'll find a menu system on /dev/tty8 (press ALT-F8 to see it). It
|
||
allows you performing some administrative tasks and to view various
|
||
system information. It is mainly for users that do not have much expe‐
|
||
rience with Unix commands.
|
||
|
||
|
||
1) (Re)start vlmcsd
|
||
Starts or restarts vlmcsd(8). This is useful if you changed
|
||
/etc/vlmcsd.ini(5).
|
||
|
||
|
||
2) Stop vlmcsd
|
||
Stops vlmcsd(8).
|
||
|
||
|
||
3) (Re)start inetd
|
||
Starts or restarts inetd(8). If inetd(8) is restarted, current
|
||
clients connected via telnet(1) or ftp(1) will not be dropped.
|
||
They can continue their sessions. This is useful if you changed
|
||
/etc/inetd.conf(5).
|
||
|
||
|
||
4) Stop inet
|
||
Stops inetd(8). All clients connected via telnet(1) or ftp(1)
|
||
will be dropped immediately.
|
||
|
||
|
||
5) Change the time zone
|
||
Just in case you missed pressing 't' during system startup. This
|
||
also restarts vlmcsd(8) if it was running to notify it that the
|
||
time zone has changed. Restarting vlmcsd(8) allows currently
|
||
connected clients to finish their activation.
|
||
|
||
|
||
k) Change keyboard layout
|
||
This allows you to select a different keyboard layout.
|
||
|
||
|
||
6) Show all kernel boot parameters
|
||
Shows all parameters passed to the kernel via syslinux.cfg. If
|
||
you experience any unexpected behavior, you can use this to
|
||
check if your APPEND line in syslinux.cfg is correct. The output
|
||
is piped through less(1). So press 'q' to return to the menu.
|
||
|
||
|
||
7) Show boot log (dmesg)
|
||
Shows the boot log of the kernel. The output is piped through
|
||
less(1). So press 'q' to return to the menu.
|
||
|
||
|
||
8) Show TCP/IP configuration
|
||
Shows the TCP/IP configuration, listening sockets and current
|
||
TCP and UDP connections. Useful, if you problems with net con‐
|
||
nectivity. The output is piped through less(1). So press 'q' to
|
||
return to the menu.
|
||
|
||
|
||
9) Show running processes
|
||
Shows all processes including memory and CPU usage. Display will
|
||
updated every second. Press 'q' or CTRL-C to return to the menu.
|
||
|
||
|
||
s) Shutdown
|
||
Shuts down the floppy144.vfd virtual machine. Proper shutdown is
|
||
not required. It is ok to use a hard power off in your virtual‐
|
||
ization program.
|
||
|
||
|
||
r) Reboot
|
||
Reboots the floppy144.vfd virtual machine. Proper reboot is not
|
||
required. It is ok to use a hard reset in your virtualization
|
||
program.
|
||
|
||
|
||
PERMANENT CHANGES OF INITRD
|
||
If you want to change any file or script of the file system (e.g. the
|
||
init script /sbin/init or /etc/vlmcsd.ini), you'll need to mount the
|
||
floppy image, unpack the initrd(4) file, make any modfications you
|
||
like, create a new initrd(4) file and copy it to the mounted floppy.
|
||
|
||
To unpack the initrd(4) file you'll need xz(1) (or lzma(1) on older
|
||
unix-like OSses) and cpio(1). These can be installed using your package
|
||
manager on all major distros. It is ok to use the BSD version of
|
||
cpio(1). No need to get the GNU version for BSD users. Provided the
|
||
floppy is mounted in /mnt/floppy do the following:
|
||
|
||
Create an empty directory
|
||
mkdir ~/vlmcsd-floppy-initrd
|
||
|
||
cd into that directory
|
||
cd ~/vlmcsd-floppy-initrd
|
||
|
||
Unpack initrd
|
||
cat /mnt/floppy/initrd | unlzma | cpio -i
|
||
|
||
After applying your changes build a new initrd(4) file:
|
||
|
||
|
||
cd into your directory
|
||
cd ~/vlmcsd-floppy-initrd
|
||
|
||
Create the packed file
|
||
find . | cpio -o -H newc | lzma > /mnt/floppy/initrd
|
||
|
||
Do not try to use 'lzma -9' to achive better compression. The kernel
|
||
can't read the resulting file. While customizing the initrd(4) file
|
||
works on almost any unix-like OS, it does not work on Windows even not
|
||
with Cygwin. The reason is that the NTFS file system can't handle uids
|
||
and gids. These cannot be preserved when unpacking the cpio(1) archive
|
||
to NTFS. If you use the WSL subsystem of Windows 10 Redstone (Anniver‐
|
||
sary Update) and later, you must make sure to unpack the initrd(4) file
|
||
to a directory on VolFs (normally everything that is not mounted under
|
||
/mnt). The initrd(4) file can be on a VolFs or DriveFs.
|
||
|
||
|
||
FAQ
|
||
On what distro is the floppy image based?
|
||
None. Besides the boot loader ldlinux.sys, there are only three bina‐
|
||
ries: The Linux kernel bzImage, busybox(1) and vlmcsdmulti-x86-musl-
|
||
static. bzImage and busybox(1) have been compiled with carefully
|
||
selected configuration parameters not found in any distro. This was
|
||
neccesary to fit everything on a 1.44 MB floppy.
|
||
|
||
|
||
Why is a rather old Linux kernel (3.12) used?
|
||
Linux 3.12 is the last kernel that can be booted with 16 MB of RAM.
|
||
Beginning with Linux 3.13 it requires much more memory (about 80 MB) to
|
||
boot. The floppy image is regularly tested with newer kernels. Every‐
|
||
thing works except that you need to assign much more main memory to the
|
||
virtual machine.
|
||
|
||
|
||
Can the floppy be booted on bare metal?
|
||
Basically yes. However, only Intel Pro/1000 and AMD PCNET32 ethernet
|
||
cards are supported by the kernel. In addition there is no USB support
|
||
compiled into the kernel. That means you can only use an IBM AT or IBM
|
||
PS/2 keyboard which are not available on newer hardware.
|
||
|
||
|
||
FILES
|
||
syslinux.cfg, vlmcsd.ini(5)
|
||
|
||
|
||
BUGS
|
||
IPv6 cannot be configured with static or manual parameters.
|
||
DHCPv6 is not supported.
|
||
´ip route add ...' does not work. Use 'route add ...' instead.
|
||
|
||
|
||
AUTHOR
|
||
floppy144.vfd has been created by Hotbird64
|
||
|
||
|
||
CREDITS
|
||
Linus Torvalds et al. for the Linux kernel
|
||
Erik Andersen et al. for the original uClibc
|
||
Waldemar Brodkorb et al. for uClibc-ng
|
||
Denys Vlasenko et al. for BusyBox
|
||
H. Peter Anvin et al. for SYSLINUX
|
||
|
||
|
||
SEE ALSO
|
||
vlmcsd(8), vlmcsd.ini(5), initrd(4), busybox(1), syslinux(1)
|
||
|
||
|
||
|
||
Hotbird64 June 2016 VLMCSD-FLOPPY(7)
|