Git Product home page Git Product logo

lrbd's Introduction

lrbd

Simplifies iSCSI management of Ceph RBD images.

The lrbd utility centrally stores the configuration in Ceph objects and executes the necessary rbd and targetcli commands to apply the stored configuration.

The tool depends on targetcli which depends on python-rtslib. The original purpose is to support the rbd backstore and is the default option. If your distribution is lacking kernel support or updated packages for targetcli and python-rtslib, the iblock backstore can be used for many configurations.

Quickstart

For the impatient, follow the instructions for the simplest configuration of one initiator to one gateway to one image. A working Ceph installation is required.

From gateway

  1. Install lrbd
    • On SUSE: # zypper in lrbd
    • On Fedora: # dnf install lrbd
    • On RHEL 7: # yum install lrbd
  2. Create a pool
    # ceph osd pool create swimming 256 256
  • Create an RBD image
    # rbd -p swimming create raft --size 2048
  • Create an initial configuration
    # lrbd -e
  • Replace archive with raft and rbd with swimming. Remove the initiator (and the comma from the previous line). Replace the host igw1 with the result of uname -n. Save the file. Run lrbd using an iblock backstore.
    # lrbd -I
  • Inspect with targetcli
    # targetcli ls

From client

  1. Discover the target.
    # iscsiadm -m discovery -t st -p gateway_address
  • Login
    # iscsiadm -m node -p gateway_address --login
  • Find device
    # multipath -ll
  • Format, write data, read data
  • Logout
    # iscsiadm -m node -p gateway_address --logout
  • Delete discovery cache
    # iscsiadm -m node -o delete

From gateway

  1. From the gateway, clear the configuration
    # lrbd -C
  • Unmap the RBD images
    # lrbd -u
  • Wipe the configuration from Ceph
    # lrbd -W

Manual

See Wiki

FAQ

  • What is a gateway?

The gateway is simply a Linux host that supports iSCSI. This host is providing iSCSI access to another host, a client or initiator, and is mapping Ceph RBD images locally. Any client that cannot use Ceph directly (lack of library support), but supports iSCSI can still use Ceph storage.

One gateway can support multiple iSCSI targets which is primarily the reason for the distinction.

  • Where should lrbd run?

For creating or editing the configuration, lrbd can run on any ceph client with proper credentials (e.g. ceph.client.admin.keyring). For applying the configuration, lrbd runs on the host intended to be a gateway.

  • What about configuring multipath?

Lrbd does not configure multipath on an initiator. See multipathd.

lrbd's People

Contributors

swiftgist avatar ddiss avatar holgis avatar ktdreyer avatar lgrawet avatar rjfd avatar

Stargazers

 avatar Zhoulin avatar sibin avatar Wenjie avatar gema-arta avatar Shawn Edwards avatar Logan V avatar  avatar Jeffrey Zhang avatar  avatar Charles Alva avatar iesool avatar Roman Dvoryadkin avatar Hunter Nield avatar Jugwan Eom avatar Sebastian Wagner avatar Robin H. Johnson avatar Thomas Johnson avatar  avatar Tim Bishop avatar  avatar Lenz Grimmer avatar Alessandro Renna avatar  avatar Yuan avatar Lars Marowsky-Brée avatar

Watchers

Paul Thompson avatar Daniel Hoffman avatar Owen Synge avatar James Cloos avatar  avatar Lars Marowsky-Brée avatar elepfontius avatar  avatar  avatar  avatar

lrbd's Issues

Add uuidgen example

For those that want a static UUID for all time (and not a generated one based on the pool, target and image name), add an example to the docs for the uuidgen command.

[bug] Missing cluster info in rbd-map function

Lrbd failed when try to map the rbd image without "cluster name" option or "config path" option
Failed => rbd -p DEV-SAS-01 --name client.admin map VOLUME-001
shoul be
rbd -c /etc/ceph/DEV.conf -p DEV-SAS-01 --name client.admin map VOLUME-001
or
rbd -c DEV -p DEV-SAS-01 --name client.admin map VOLUME-001

[feature] Fixed LUN ID

We will have many solutions need fixed lun information included LUN Serial (lrbd fixed already) and LUN ID. Can you add more a parameter for LUN ID ?

[Limit] Alua and Multipath active/standby

Hi swiftgist,
We've had a critical issue when try use multi gateways, multipath active/active and enable "round-robin" policy in client configuration. With this configuration, the data will be inconsistent because the data maybe in cache not in Ceph cluster already for the other GW access. You should add this limitation to your wiki. "active/standby" is recommendation and with this config, it will limit just one tpg on one gateway node.
To solve this issue, tried to config alua feature. I seem to success to help me control the paths of all clients connect to my gateways. Right now for one LUN, the data traffic just come and out at same gateway node.

ERROR: 'Rados' object has no attribute 'pool_lookup'

In the test rbd process, found lrbd will go to seek for ool_lookup , might throw an exception (error:'Rados'object has no attribute'pool_lookup''pool_lookup'), I in the official website of the CEPH also not find the pool lookup,please tell me this error how to solve

my os is centos7
/home/lrbd/lrbd -o

targetcli exit command not working

Not sure if this is lrbd related or just targetcli, but its the Opensuse version of targetcli package that is installed with lrbd....

When trying to issue the command "exit" within targetcli instead of exiting it throws this and bring me back to the targetcli prompt.....

o- loopback .......................................................................................................... [0 Targets]
o- qla2xxx ........................................................................................................... [0 Targets]
o- tcm_fc ............................................................................................................ [0 Targets]
o- vhost ............................................................................................................. [0 Targets]
/> exit
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/configshell/shell.py", line 990, in run_interactive
self._cli_loop()
File "/usr/lib/python2.7/site-packages/configshell/shell.py", line 820, in _cli_loop
self.run_cmdline(cmdline)
File "/usr/lib/python2.7/site-packages/configshell/shell.py", line 934, in run_cmdline
self._execute_command(path, command, pparams, kparams)
File "/usr/lib/python2.7/site-packages/configshell/shell.py", line 909, in _execute_command
result = target.execute_command(command, pparams, kparams)
File "/usr/lib/python2.7/site-packages/targetcli/ui_node.py", line 103, in execute_command
pparams, kparams)
File "/usr/lib/python2.7/site-packages/configshell/node.py", line 1416, in execute_command
result = method(*pparams, **kparams)
File "/usr/lib/python2.7/site-packages/targetcli/ui_node.py", line 115, in ui_command_exit
config = Config()
File "/usr/lib/python2.7/site-packages/rtslib/config.py", line 133, in init
self._load_policy()
File "/usr/lib/python2.7/site-packages/rtslib/config.py", line 144, in _load_policy
parse_tree = self._policy_parser.parse_file(filepath)
File "/usr/lib/python2.7/site-packages/rtslib/config_parser.py", line 144, in parse_file
return self._parser.parseFile(filepath, parseAll=True).asList()
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 2144, in parseFile
return self.parseString(file_contents, parseAll)
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1607, in parseString
loc, tokens = self._parse( instring, 0 )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3900, in parseImpl
return super(ZeroOrMore, self).parseImpl(instring, loc, doActions)
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3829, in parseImpl
loc, tokens = self_expr_parse( instring, loc, doActions, callPreParse=False )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3698, in parseImpl
return self.expr._parse( instring, loc, doActions, callPreParse=False )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3698, in parseImpl
return self.expr._parse( instring, loc, doActions, callPreParse=False )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3376, in parseImpl
loc, exprtokens = e._parse( instring, loc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3511, in parseImpl
ret = e._parse( instring, loc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3376, in parseImpl
loc, exprtokens = e._parse( instring, loc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3964, in parseImpl
loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3511, in parseImpl
ret = e._parse( instring, loc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3698, in parseImpl
return self.expr._parse( instring, loc, doActions, callPreParse=False )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3376, in parseImpl
loc, exprtokens = e._parse( instring, loc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3829, in parseImpl
loc, tokens = self_expr_parse( instring, loc, doActions, callPreParse=False )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3698, in parseImpl
return self.expr._parse( instring, loc, doActions, callPreParse=False )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3698, in parseImpl
return self.expr._parse( instring, loc, doActions, callPreParse=False )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3376, in parseImpl
loc, exprtokens = e._parse( instring, loc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3511, in parseImpl
ret = e._parse( instring, loc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3376, in parseImpl
loc, exprtokens = e._parse( instring, loc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3964, in parseImpl
loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3511, in parseImpl
ret = e._parse( instring, loc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3698, in parseImpl
return self.expr._parse( instring, loc, doActions, callPreParse=False )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3376, in parseImpl
loc, exprtokens = e._parse( instring, loc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3829, in parseImpl
loc, tokens = self_expr_parse( instring, loc, doActions, callPreParse=False )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3698, in parseImpl
return self.expr._parse( instring, loc, doActions, callPreParse=False )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3698, in parseImpl
return self.expr._parse( instring, loc, doActions, callPreParse=False )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3376, in parseImpl
loc, exprtokens = e._parse( instring, loc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3511, in parseImpl
ret = e._parse( instring, loc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3376, in parseImpl
loc, exprtokens = e._parse( instring, loc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3964, in parseImpl
loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3511, in parseImpl
ret = e._parse( instring, loc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3698, in parseImpl
return self.expr._parse( instring, loc, doActions, callPreParse=False )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3376, in parseImpl
loc, exprtokens = e._parse( instring, loc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3839, in parseImpl
loc, tmptokens = self_expr_parse( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3698, in parseImpl
return self.expr._parse( instring, loc, doActions, callPreParse=False )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3698, in parseImpl
return self.expr._parse( instring, loc, doActions, callPreParse=False )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3376, in parseImpl
loc, exprtokens = e._parse( instring, loc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3511, in parseImpl
ret = e._parse( instring, loc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3376, in parseImpl
loc, exprtokens = e._parse( instring, loc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3964, in parseImpl
loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3511, in parseImpl
ret = e._parse( instring, loc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3698, in parseImpl
return self.expr._parse( instring, loc, doActions, callPreParse=False )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3376, in parseImpl
loc, exprtokens = e._parse( instring, loc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3829, in parseImpl
loc, tokens = self_expr_parse( instring, loc, doActions, callPreParse=False )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3698, in parseImpl
return self.expr._parse( instring, loc, doActions, callPreParse=False )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3698, in parseImpl
return self.expr._parse( instring, loc, doActions, callPreParse=False )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3376, in parseImpl
loc, exprtokens = e._parse( instring, loc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 3511, in parseImpl
ret = e._parse( instring, loc, doActions )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1405, in _parseNoCache
tokens = fn( instring, tokensStart, retTokens )
File "/usr/lib/python2.7/site-packages/pyparsing.py", line 1049, in wrapper
ret = func(*args[limit[0]:])
File "/usr/lib/python2.7/site-packages/rtslib/config_parser.py", line 225, in _parse_action_attr
ref_path = " ".join(ref_path.asList())
AttributeError: 'list' object has no attribute 'asList'
/>

[feature] automatically detect and apply configuration updates

lrbd could use RADOS watch/notify functionality to automatically detect and apply configuration changes.

  • change the one-shot systemd service to run "rados watch "
  • ensure that all updates to the config object are atomic
  • notify all watchers via "rados notify "
  • apply the new configuration locally on notification

Error with in place editor

During SUSECon, one of the attendees could not change a pool name using "lrbd -e" without getting an error. This was on lrbd 1.1-8.

[Feature] Multi ceph cluster support

Hi swiftgist,
I carefuly read you documents but I'm being confused about how to define the ceph cluster name that named with another name not like "ceph" ?
example:

"pool": "rbd",
"cluster":'CEPH_01"

I think this is a healpful feature that can help we have multi CEPH Cluster backend.

Cannot install lrdb on CentOS7

I have a 4 node of CEPH Cluster

rebuild topo

Then after install successfully CEPH i start install Lrdb on 3node OSD but cannot install

[root@node1 ~]# yum install lrbd
Loaded plugins: fastestmirror
Ceph                                          | 2.9 kB     00:00     
Ceph-noarch                                   | 2.9 kB     00:00     
base                                          | 3.6 kB     00:00     
ceph-source                                                     | 2.9 kB  00:00:00     
elrepo                                                          | 2.9 kB  00:00:00     
epel/x86_64/metalink                                            | 8.0 kB  00:00:00     
epel                                                            | 4.3 kB  00:00:00     
extras                                                          | 3.4 kB  00:00:00     
updates                                                         | 3.4 kB  00:00:00     
(1/3): updates/7/x86_64/primary_db                              | 2.7 MB  00:00:00     
(2/3): epel/x86_64/primary_db                                   | 4.8 MB  00:00:02     
(3/3): epel/x86_64/updateinfo                                   | 840 kB  00:00:24     
Loading mirror speeds from cached hostfile
* base: mirrors.nhanhoa.com
* elrepo: hkg.mirror.rackspace.com
* epel: mirror.ehost.vn
* extras: mirrors.nhanhoa.com
* updates: mirrors.nhanhoa.com
No package lrbd available.
Error: Nothing to do
[root@node1 ~]# uname -sr 
Linux 4.13.5-1.el7.elrepo.x86_64
[root@node1 ~]# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 

CEPH version

[root@node1 ~]# ceph -v 
ceph version 10.2.10 (5dc1e4c05cb68dbf62ae6fce3f0700e4654fdbbe)

On Ceph docs requirement on ISCSI Target is RHEL/CentOS 7.4; or Linux kernel v4.14 or newer so my environment with Linux 4.13.5 and 7.4.1708 (Core) is OK?

How can i using iSCSI on my CEPH cluster

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.