| What: /sys/class/rnbd-client |
| Date: Feb 2020 |
| KernelVersion: 5.7 |
| Contact: Jack Wang <jinpu.wang@cloud.ionos.com> Danil Kipnis <danil.kipnis@cloud.ionos.com> |
| Description: Provide information about RNBD-client. |
| All sysfs files that are not read-only provide the usage information on read: |
| |
| Example:: |
| |
| # cat /sys/class/rnbd-client/ctl/map_device |
| |
| > Usage: echo "sessname=<name of the rtrs session> path=<[srcaddr,]dstaddr> |
| > [path=<[srcaddr,]dstaddr>] device_path=<full path on remote side> |
| > [access_mode=<ro|rw|migration>] > map_device |
| > |
| > addr ::= [ ip:<ipv4> | ip:<ipv6> | gid:<gid> ] |
| |
| What: /sys/class/rnbd-client/ctl/map_device |
| Date: Feb 2020 |
| KernelVersion: 5.7 |
| Contact: Jack Wang <jinpu.wang@cloud.ionos.com> Danil Kipnis <danil.kipnis@cloud.ionos.com> |
| Description: Expected format is the following:: |
| |
| sessname=<name of the rtrs session> |
| path=<[srcaddr,]dstaddr> [path=<[srcaddr,]dstaddr> ...] |
| device_path=<full path on remote side> |
| [access_mode=<ro|rw|migration>] |
| |
| Where: |
| |
| sessname: |
| accepts a string not bigger than 256 chars, which identifies |
| a given session on the client and on the server. |
| I.e. "clt_hostname-srv_hostname" could be a natural choice. |
| |
| path: |
| describes a connection between the client and the server by |
| specifying destination and, when required, the source address. |
| The addresses are to be provided in the following format:: |
| |
| ip:<IPv6> |
| ip:<IPv4> |
| gid:<GID> |
| |
| for example:: |
| |
| path=ip:10.0.0.66 |
| |
| The single addr is treated as the destination. |
| The connection will be established to this server from any client IP address. |
| |
| :: |
| |
| path=ip:10.0.0.66,ip:10.0.1.66 |
| |
| First addr is the source address and the second is the destination. |
| |
| If multiple "path=" options are specified multiple connection |
| will be established and data will be sent according to |
| the selected multipath policy (see RTRS mp_policy sysfs entry description). |
| |
| device_path: |
| Path to the block device on the server side. Path is specified |
| relative to the directory on server side configured in the |
| 'dev_search_path' module parameter of the rnbd_server. |
| The rnbd_server prepends the <device_path> received from client |
| with <dev_search_path> and tries to open the |
| <dev_search_path>/<device_path> block device. On success, |
| a /dev/rnbd<N> device file, a /sys/block/rnbd<N>/ |
| directory and an entry in /sys/class/rnbd-client/ctl/devices |
| will be created. |
| |
| If 'dev_search_path' contains '%SESSNAME%', then each session can |
| have different devices namespace, e.g. server was configured with |
| the following parameter "dev_search_path=/run/rnbd-devs/%SESSNAME%", |
| client has this string "sessname=blya device_path=sda", then server |
| will try to open: /run/rnbd-devs/blya/sda. |
| |
| access_mode: |
| the access_mode parameter specifies if the device is to be |
| mapped as "ro" read-only or "rw" read-write. The server allows |
| a device to be exported in rw mode only once. The "migration" |
| access mode has to be specified if a second mapping in read-write |
| mode is desired. |
| |
| By default "rw" is used. |
| |
| nr_poll_queues |
| specifies the number of poll-mode queues. If the IO has HIPRI flag, |
| the block-layer will send the IO via the poll-mode queue. |
| For fast network and device the polling is faster than interrupt-base |
| IO handling because it saves time for context switching, switching to |
| another process, handling the interrupt and switching back to the |
| issuing process. |
| |
| Set -1 if you want to set it as the number of CPUs |
| By default rnbd client creates only irq-mode queues. |
| |
| NOTICE: MUST make a unique session for a device using the poll-mode queues. |
| |
| Exit Codes: |
| |
| If the device is already mapped it will fail with EEXIST. If the input |
| has an invalid format it will return EINVAL. If the device path cannot |
| be found on the server, it will fail with ENOENT. |
| |
| Finding device file after mapping |
| --------------------------------- |
| |
| After mapping, the device file can be found by: |
| o The symlink /sys/class/rnbd-client/ctl/devices/<device_id>@<session_name> |
| points to /sys/block/<dev-name>. The last part of the symlink destination |
| is the same as the device name. By extracting the last part of the |
| path the path to the device /dev/<dev-name> can be build. |
| |
| * /dev/block/$(cat /sys/class/rnbd-client/ctl/devices/<device_id>@<session_name>/dev) |
| |
| How to find the <device_id> of the device is described on the next |
| section. |
| |
| What: /sys/class/rnbd-client/ctl/devices/ |
| Date: Feb 2020 |
| KernelVersion: 5.7 |
| Contact: Jack Wang <jinpu.wang@cloud.ionos.com> Danil Kipnis <danil.kipnis@cloud.ionos.com> |
| Description: For each device mapped on the client a new symbolic link is created as |
| /sys/class/rnbd-client/ctl/devices/<device_id>@<session_name>, which points |
| to the block device created by rnbd (/sys/block/rnbd<N>/). |
| The <device_id> of each device is created as follows: |
| |
| - If the 'device_path' provided during mapping contains slashes ("/"), |
| they are replaced by exclamation mark ("!") and used as as the |
| <device_id>. Otherwise, the <device_id> will be the same as the |
| "device_path" provided. |