mirror of
				https://github.com/ventoy/Ventoy.git
				synced 2025-10-31 14:56:22 +00:00 
			
		
		
		
	
		
			
	
	
		
			147 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			147 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | 
 | ||
|  | INTRODUCTION | ||
|  | ------------ | ||
|  | 
 | ||
|  | The vblade is a minimal ATA over Ethernet (AoE) storage target.  Its | ||
|  | focus is simplicity, not performance or richness of features.  It | ||
|  | exports a seekable file available over an ethernet local area network | ||
|  | (LAN) via the AoE data storage protocol. | ||
|  | 
 | ||
|  | The name, "vblade," is historical: It is a virtual EtherDrive (R) | ||
|  | blade.  The first AoE target hardware sold by Coraid was in a blade | ||
|  | form factor, ten to a 4-rack-unit chassis. | ||
|  | 
 | ||
|  | The seekable file is typically a block device like /dev/md0 but even | ||
|  | regular files will work.  Sparse files can be especially convenient. | ||
|  | When vblade exports the block storage over AoE it becomes a storage | ||
|  | target.  Another host on the same LAN can access the storage if it has | ||
|  | a compatible aoe kernel driver. | ||
|  | 
 | ||
|  | BUILDING | ||
|  | -------- | ||
|  | 
 | ||
|  | The following command should build the vblade program on a Linux-based | ||
|  | system: | ||
|  | 
 | ||
|  |   make | ||
|  | 
 | ||
|  | For FreeBSD systems, include an extra parameter like so: | ||
|  | 
 | ||
|  |   make PLATFORM=freebsd | ||
|  | 
 | ||
|  | EXAMPLES | ||
|  | -------- | ||
|  | 
 | ||
|  | There is a "vbladed" script that daemonizes the program and sends its | ||
|  | output to the logger program.  Make sure you have logger installed if | ||
|  | you would like to run vblade as a daemon with the vbladed script. | ||
|  | 
 | ||
|  |   ecashin@kokone vblade$ echo 'I have logger' | logger | ||
|  |   ecashin@kokone vblade$ tail -3 /var/log/messages | ||
|  |   Feb  8 14:52:49 kokone -- MARK -- | ||
|  |   Feb  8 15:12:49 kokone -- MARK -- | ||
|  |   Feb  8 15:19:56 kokone logger: I have logger | ||
|  | 
 | ||
|  | Here is a short example showing how to export a block device with a | ||
|  | vblade.  (This is a loop device backed by a sparse file, but you could | ||
|  | use any seekable file instead of /dev/loop7.) | ||
|  | 
 | ||
|  |   ecashin@kokone vblade$ make | ||
|  |   cc -Wall   -c -o aoe.o aoe.c | ||
|  |   cc -Wall   -c -o linux.o linux.c | ||
|  |   cc -Wall   -c -o ata.o ata.c | ||
|  |   cc -o vblade aoe.o linux.o ata.o | ||
|  |   ecashin@kokone vblade$ su | ||
|  |   Password:  | ||
|  |   root@kokone vblade# modprobe loop | ||
|  |   root@kokone vblade# dd if=/dev/zero bs=1k count=1 seek=`expr 1024 \* 4096` of=bd | ||
|  |   -file | ||
|  |   1+0 records in | ||
|  |   1+0 records out | ||
|  |   1024 bytes transferred in 0.009901 seconds (103423 bytes/sec) | ||
|  |   root@kokone vblade# losetup /dev/loop7 bd-file   | ||
|  |   root@kokone vblade# ./vblade 9 0 eth0 /dev/loop7  | ||
|  |   ioctl returned 0 | ||
|  |   4294968320 bytes | ||
|  |   pid 16967: e9.0, 8388610 sectors | ||
|  | 
 | ||
|  | Here's how you can use the Linux aoe driver to access the storage from | ||
|  | another host on the LAN. | ||
|  | 
 | ||
|  |   ecashin@kokone ecashin$ ssh makki | ||
|  |   Last login: Mon Feb  7 10:25:04 2005 | ||
|  |   ecashin@makki ~$ su | ||
|  |   Password:  | ||
|  |   root@makki ecashin# modprobe aoe | ||
|  |   root@makki ecashin# aoe-stat | ||
|  |       e9.0            eth1              up | ||
|  |   root@makki ecashin# mkfs -t ext3 /dev/etherd/e9.0 | ||
|  |   mke2fs 1.35 (28-Feb-2004) | ||
|  | ... | ||
|  |   Creating journal (8192 blocks): done | ||
|  |   Writing superblocks and filesystem accounting information: done | ||
|  |    | ||
|  |   This filesystem will be automatically checked every 24 mounts or | ||
|  |   180 days, whichever comes first.  Use tune2fs -c or -i to override. | ||
|  |   root@makki ecashin# mkdir /mnt/e9.0 | ||
|  |   root@makki ecashin# mount /dev/etherd/e9.0 /mnt/e9.0 | ||
|  |   root@makki ecashin# echo hooray > /mnt/e9.0/test.txt | ||
|  |   root@makki ecashin# cat /mnt/e9.0/test.txt | ||
|  |   hooray | ||
|  | 
 | ||
|  | Remember: be as careful with these devices as you would with /dev/hda! | ||
|  | 
 | ||
|  | Jumbo Frame Compatibility | ||
|  | ------------------------- | ||
|  | 
 | ||
|  | Vblade can use jumbo frames provided your initiator is jumbo frame | ||
|  | capable.  There is one small configuration gotcha to consider  | ||
|  | to avoid having the vblade kernel frequently drop frames. | ||
|  | 
 | ||
|  | Vblade uses a raw socket to perform AoE.  The linux kernel will | ||
|  | only buffer a certain amount of data for a raw socket.  For 2.6 | ||
|  | kernels, this value is managed through /proc: | ||
|  | 
 | ||
|  | root@nai aoe# grep . /proc/sys/net/core/rmem_* | ||
|  | /proc/sys/net/core/rmem_default:128000 | ||
|  | /proc/sys/net/core/rmem_max:128000 | ||
|  | 
 | ||
|  | rmem_max is the max amount a user process may expand the receive | ||
|  | buffer to -- through setsockopt(...) -- and rmem_default is, as you | ||
|  | might expect, the default. | ||
|  | 
 | ||
|  | The gotcha is that this amount to buffer does not relate | ||
|  | to the amount of user data buffered, but the amount of | ||
|  | real data buffered.  As an example, the Intel GbE controller | ||
|  | must be given 16KB frames to use an MTU over 8KB. | ||
|  | For each received frame, the kernel must be able to buffer | ||
|  | 16KB, even if the aoe frame is only 60 bytes in length. | ||
|  | 
 | ||
|  | The linux aoe initiator will use 16 outstanding frames when | ||
|  | used with vblade.  A good default for ensuring frames are | ||
|  | not dropped is to allocate 16KB for 17 frames: | ||
|  | 
 | ||
|  | for f in /proc/sys/net/core/rmem_*; do echo $((17 * 16 * 1024)) >$f; done | ||
|  | 
 | ||
|  | Be sure to start vblade after changing the buffering defaults | ||
|  | as the buffer value is set when the socket is opened. | ||
|  | 
 | ||
|  | AoE Initiator Compatibility | ||
|  | --------------------------- | ||
|  | 
 | ||
|  | The Linux aoe driver for the 2.6 kernel is compatible if you use | ||
|  | aoe-2.6-7 or newer.  You can use older aoe drivers but you will only | ||
|  | be able to see one vblade per MAC address. | ||
|  | 
 | ||
|  | Contrib Patches | ||
|  | --------------- | ||
|  | 
 | ||
|  | see contrib/README | ||
|  | 
 | ||
|  | Kvblade | ||
|  | ------- | ||
|  | 
 | ||
|  |   While vblade runs as a userland process (like "ls" or "vi"), there | ||
|  |   is another program that runs inside the kernel.  It is called | ||
|  |   kvblade.  It is alpha software. |