• Laurent Vivier's avatar
    NBD: add partition support · d71a6d73
    Laurent Vivier authored
    Permit the use of partitions with network block devices (NBD).
    
    A new parameter is introduced to define how many partition we want to be able
    to manage per network block device.  This parameter is "max_part".
    
    For instance, to manage 63 partitions / loop device, we will do:
    
       [on the server side]
    # nbd-server 1234 /dev/sdb
       [on the client side]
    # modprobe nbd max_part=63
    # ls -l /dev/nbd*
    brw-rw---- 1 root disk 43,   0 2008-03-25 11:14 /dev/nbd0
    brw-rw---- 1 root disk 43,  64 2008-03-25 11:11 /dev/nbd1
    brw-rw---- 1 root disk 43, 640 2008-03-25 11:11 /dev/nbd10
    brw-rw---- 1 root disk 43, 704 2008-03-25 11:11 /dev/nbd11
    brw-rw---- 1 root disk 43, 768 2008-03-25 11:11 /dev/nbd12
    brw-rw---- 1 root disk 43, 832 2008-03-25 11:11 /dev/nbd13
    brw-rw---- 1 root disk 43, 896 2008-03-25 11:11 /dev/nbd14
    brw-rw---- 1 root disk 43, 960 2008-03-25 11:11 /dev/nbd15
    brw-rw---- 1 root disk 43, 128 2008-03-25 11:11 /dev/nbd2
    brw-rw---- 1 root disk 43, 192 2008-03-25 11:11 /dev/nbd3
    brw-rw---- 1 root disk 43, 256 2008-03-25 11:11 /dev/nbd4
    brw-rw---- 1 root disk 43, 320 2008-03-25 11:11 /dev/nbd5
    brw-rw---- 1 root disk 43, 384 2008-03-25 11:11 /dev/nbd6
    brw-rw---- 1 root disk 43, 448 2008-03-25 11:11 /dev/nbd7
    brw-rw---- 1 root disk 43, 512 2008-03-25 11:11 /dev/nbd8
    brw-rw---- 1 root disk 43, 576 2008-03-25 11:11 /dev/nbd9
    # nbd-client localhost 1234 /dev/nbd0
    Negotiation: ..size = 80418240KB
    bs=1024, sz=80418240
    
    -------NOTE, RFC: partition table is not automatically read.
    The driver sets bdev->bd_invalidated to 1 to force the read of the partition
    table of the device, but this is done only on an open of the device.
    So we have to do a "touch /dev/nbdX" or something like that.
    It can't be done from the nbd-client or nbd driver because at this
    level we can't ask to read the partition table and to serve the request
    at the same time (-> deadlock)
    
    If someone has a better idea, I'm open to any suggestion.
    -------NOTE, RFC
    
    # fdisk -l /dev/nbd0
    
    Disk /dev/nbd0: 82.3 GB, 82348277760 bytes
    255 heads, 63 sectors/track, 10011 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
         Device Boot      Start         End      Blocks   Id  System
    /dev/nbd0p1   *           1        9965    80043831   83  Linux
    /dev/nbd0p2            9966       10011      369495    5  Extended
    /dev/nbd0p5            9966       10011      369463+  82  Linux swap / Solaris
    
    # ls -l /dev/nbd0*
    brw-rw---- 1 root disk 43,   0 2008-03-25 11:16 /dev/nbd0
    brw-rw---- 1 root disk 43,   1 2008-03-25 11:16 /dev/nbd0p1
    brw-rw---- 1 root disk 43,   2 2008-03-25 11:16 /dev/nbd0p2
    brw-rw---- 1 root disk 43,   5 2008-03-25 11:16 /dev/nbd0p5
    # mount /dev/nbd0p1 /mnt
    # ls /mnt
    bin    dev   initrd      lost+found  opt   sbin     sys  var
    boot   etc   initrd.img  media       proc  selinux  tmp  vmlinuz
    cdrom  home  lib         mnt         root  srv      usr
    # umount /mnt
    # nbd-client -d /dev/nbd0
    # ls -l /dev/nbd0*
    brw-rw---- 1 root disk 43, 0 2008-03-25 11:16 /dev/nbd0
    -------NOTE
    On "nbd-client -d", we can do an iocl(BLKRRPART) to update partition table:
    as the size of the device is 0, we don't have to serve the partition manager
    request (-> no deadlock).
    -------NOTE
    Signed-off-by: default avatarPaul Clements <paul.clements@steeleye.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    d71a6d73
nbd.c 19.9 KB