{"id":2443,"date":"2017-05-09T20:54:24","date_gmt":"2017-05-09T18:54:24","guid":{"rendered":"http:\/\/monodes.com\/predaelli\/?p=2443"},"modified":"2017-05-09T11:14:00","modified_gmt":"2017-05-09T09:14:00","slug":"building-a-ceph-cluster-on-raspberry-pi","status":"publish","type":"post","link":"https:\/\/monodes.com\/predaelli\/2017\/05\/09\/building-a-ceph-cluster-on-raspberry-pi\/","title":{"rendered":"Building a Ceph Cluster on Raspberry Pi"},"content":{"rendered":"<p><em><a href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/\">Building a Ceph Cluster on Raspberry Pi &#8211; Bryan Apperson<\/a><\/em><\/p>\n<div class=\"comment-content\">\n<p>As the author clearly stated in a comment, this is more of a proof-of-concept for learning ceph, not for a real deploy as it&#8217;s not meant to be cheaper per GB, but cheaper for initial cost: a &#8220;3 figure cost of entry way to begin learning ceph&#8221;.<\/p>\n<p>Even today\u00a0 (year 2017) an x86 based solution will have a minimum cost much higher while giving higher performances (<a href=\"https:\/\/www.nexths.it\/v3\/flypage.php?mv_arg=CUBI%20N-021BEU\">129\u20ac just for a single CPU board<\/a> plus case without memory and storage)<\/p>\n<\/div>\n<p><!--more--><!--nextpage--><\/p>\n<blockquote>\n<nav class=\"site-nav\"><\/nav>\n<div id=\"page\" class=\"hfeed site\">\n<div id=\"content\" class=\"site-content\">\n<header id=\"masthead\" class=\"site-header\">\n<div class=\"site-branding\">\n<h1 class=\"site-title\"><a href=\"http:\/\/bryanapperson.com\">Bryan Apperson<\/a><\/h1>\n<p class=\"site-description\">From the Cloud to The Ocean<\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<\/header>\n<div class=\"article-cover article-cover--698\">\n<div class=\"article-cover__background stag-image--none\"><\/div>\n<div class=\"article-cover__inner\">\n<div class=\"article-cover__content\">\n<h1 class=\"entry-title\"><a href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/\" rel=\"bookmark\"> The Definitive Guide: Ceph Cluster on Raspberry Pi <\/a><\/h1>\n<footer class=\"entry-meta\"><span class=\"posted-on\"><a title=\"1:35 am\" href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/\" rel=\"bookmark\"><time class=\"entry-date published\" datetime=\"2015-05-13T01:35:35+00:00\">May 13, 2015<\/time><\/a><\/span><span class=\"reading-time\">15 minute read<\/span><span class=\"byline\">by <span class=\"author vcard\"><a class=\"url fn n\" href=\"http:\/\/bryanapperson.com\/blog\/author\/bytedisorder\/\">Bryan Apperson<\/a><\/span><\/span><\/footer>\n<div class=\"entry-categories\">In <a href=\"http:\/\/bryanapperson.com\/blog\/category\/development\/\" rel=\"category tag\">Development<\/a>, <a href=\"http:\/\/bryanapperson.com\/blog\/category\/linux-tutorials\/\" rel=\"category tag\">Linux Tutorials<\/a>, <a href=\"http:\/\/bryanapperson.com\/blog\/category\/technology\/\" rel=\"category tag\">Technology<\/a><\/div>\n<\/div>\n<\/div>\n<div class=\"article-cover__caption\">\n<p>3 Node Ceph Cluster on Raspberry Pi<\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<\/div>\n<article id=\"post-698\" class=\"post-698 post type-post status-publish format-standard has-post-thumbnail hentry category-development category-linux-tutorials category-technology tag-arm tag-ceph tag-ha tag-rados tag-raspberry-pi tag-usb\">\n<div class=\"entry-content\">\n<p>A Ceph cluster on Raspberry Pi is an awesome way to create a\u00a0RADOS home storage solution (NAS)\u00a0that is highly redundant and low power usage. It\u2019s also a low cost way to get into Ceph, which may or may not be the future of storage (software defined storage definitely is as a whole). Ceph on ARM is an interesting idea in and of itself. I built one of these as a development environment (playground) for home. \u00a0It can be done on a relatively small\u00a0budget. Since this was a spur of the moment idea, I purchased everything locally. I opted for the <a href=\"https:\/\/www.raspberrypi.org\/products\/raspberry-pi-2-model-b\/\">Raspberry Pi 2 B<\/a> (for the 4 cores and 1GB of RAM). I\u2019d really recommend going with the Pi 2 B, so you have one core and 256MB RAM for each USB port (potential OSD). In this guide I will outline the parts, software I used and some options that you can use\u00a0for achieving better performance. This guide assumes you have access to a Linux PC with an SD card reader. It also assumes you have a working knowledge of Linux in general and a passing familiarity with Ceph.<\/p>\n<h2>Parts<\/h2>\n<p>Although I will explain many options in this guide, this is the minimum you will need to get a cluster up and running, this list assumes 3 Pi nodes.<\/p>\n<div id=\"crayon-59117ffcebf9c082409957\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">3 x 3ft Cat6 Cables&lt;br \/&gt;<br \/>\n3 x Raspberry Pi 2 B&lt;br \/&gt;<br \/>\n3 x Raspberry Pi 2 B Case&lt;br \/&gt;<br \/>\n3 x 2 Amp Micro USB Power Supply&lt;br \/&gt;<br \/>\n3 empty ports on a gigabit router&lt;br \/&gt;<br \/>\n3 x Class 10 MicroSD (16GB or more) for OS drive&lt;br \/&gt;<br \/>\n3-12 x USB 2.0 Flash Drives (at least 32GB, better drive for better performance)<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebf9c082409957-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcebf9c082409957-2\">2<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebf9c082409957-3\">3<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcebf9c082409957-4\">4<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebf9c082409957-5\">5<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcebf9c082409957-6\">6<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebf9c082409957-7\">7<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcebf9c082409957-1\" class=\"crayon-line\"><span class=\"crayon-cn\">3<\/span> <span class=\"crayon-i\">x<\/span> <span class=\"crayon-cn\">3ft<\/span> <span class=\"crayon-e\">Cat6 <\/span><span class=\"crayon-i\">Cables<\/span><\/div>\n<div id=\"crayon-59117ffcebf9c082409957-2\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-cn\">3<\/span> <span class=\"crayon-i\">x<\/span> <span class=\"crayon-e\">Raspberry <\/span><span class=\"crayon-i\">Pi<\/span> <span class=\"crayon-cn\">2<\/span> <span class=\"crayon-i\">B<\/span><\/div>\n<div id=\"crayon-59117ffcebf9c082409957-3\" class=\"crayon-line\"><span class=\"crayon-cn\">3<\/span> <span class=\"crayon-i\">x<\/span> <span class=\"crayon-e\">Raspberry <\/span><span class=\"crayon-i\">Pi<\/span> <span class=\"crayon-cn\">2<\/span> <span class=\"crayon-i\">B<\/span> <span class=\"crayon-st\">Case<\/span><\/div>\n<div id=\"crayon-59117ffcebf9c082409957-4\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-cn\">3<\/span> <span class=\"crayon-i\">x<\/span> <span class=\"crayon-cn\">2<\/span> <span class=\"crayon-e\">Amp <\/span><span class=\"crayon-e\">Micro <\/span><span class=\"crayon-e\">USB <\/span><span class=\"crayon-e\">Power <\/span><span class=\"crayon-i\">Supply<\/span><\/div>\n<div id=\"crayon-59117ffcebf9c082409957-5\" class=\"crayon-line\"><span class=\"crayon-cn\">3<\/span> <span class=\"crayon-e\">empty <\/span><span class=\"crayon-e\">ports <\/span><span class=\"crayon-i\">on<\/span> <span class=\"crayon-i\">a<\/span> <span class=\"crayon-e\">gigabit <\/span><span class=\"crayon-i\">router<\/span><\/div>\n<div id=\"crayon-59117ffcebf9c082409957-6\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-cn\">3<\/span> <span class=\"crayon-i\">x<\/span> <span class=\"crayon-t\">Class<\/span> <span class=\"crayon-cn\">10<\/span> <span class=\"crayon-e\">MicroSD<\/span> <span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">16GB<\/span> <span class=\"crayon-st\">or<\/span> <span class=\"crayon-v\">more<\/span><span class=\"crayon-sy\">)<\/span> <span class=\"crayon-st\">for<\/span> <span class=\"crayon-e\">OS <\/span><span class=\"crayon-i\">drive<\/span><\/div>\n<div id=\"crayon-59117ffcebf9c082409957-7\" class=\"crayon-line\"><span class=\"crayon-cn\">3<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-cn\">12<\/span> <span class=\"crayon-i\">x<\/span> <span class=\"crayon-i\">USB<\/span> <span class=\"crayon-cn\">2.0<\/span> <span class=\"crayon-e\">Flash <\/span><span class=\"crayon-e\">Drives<\/span> <span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">at <\/span><span class=\"crayon-i\">least<\/span> <span class=\"crayon-cn\">32GB<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-e\">better <\/span><span class=\"crayon-e\">drive <\/span><span class=\"crayon-st\">for<\/span> <span class=\"crayon-e\">better <\/span><span class=\"crayon-v\">performance<\/span><span class=\"crayon-sy\">)<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>I used 3 x 64GB flash drives, 3 x 32GB MicroSD and existing ports on my router. My cost came in at about $250. You can add to this list based on what you add to your setup throughout the guide, but this is pretty much the minimum for a fully functional Ceph cluster.<\/p>\n<h2>Operating System<\/h2>\n<p>Raspbian. The testing repository for Raspbian has the many packages of Ceph 0.80.9 and dependencies pre-compiled. Everything you\u2019ll need for this tutorial and is the \u201cde facto\u201d OS of choice for flexibility on Raspberry Pi. You can download the Raspbian image here:\u00a0<a href=\"http:\/\/downloads.raspberrypi.org\/raspbian_latest\">Raspbian Download<\/a>. Once you have the image, you\u2019ll want to put it on an SD card. For this application I recommend using at least a 16GB MicroSD card (Class 10 preferably \u2013 OS drive speed matters for Ceph monitor processes). To transfer the image on Linux, you can use DD. run the <span id=\"crayon-59117ffcebfb0758357264\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-v\">lsblk<\/span><\/span><\/span>\u00a0command to display your devices once you\u2019ve inserted the card into your card reader. Then you can use <span id=\"crayon-59117ffcebfb4163184081\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-v\">dd<\/span><\/span><\/span>\u00a0 to transfer the image to your SD.\u00a0The command below assumes the image name is <span id=\"crayon-59117ffcebfb7048168383\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-v\">raspbian<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">wheezy<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">img<\/span><\/span><\/span>\u00a0 and that it lives in your present working directory. The above command also assumes that your SD card is located at <span id=\"crayon-59117ffcebfba706067259\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">dev<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">mmcblk0<\/span><\/span><\/span>\u00a0adjust these accordingly and make sure that your SD card doesn\u2019t contain anything important and is empty.<\/p>\n<div id=\"crayon-59117ffcebfbd926845095\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">sudo dd bs=4M if=raspbian-wheezy.img of=\/dev\/mmcblk0<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebfbd926845095-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcebfbd926845095-1\" class=\"crayon-line\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-e\">dd <\/span><span class=\"crayon-v\">bs<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-cn\">4M<\/span> <span class=\"crayon-st\">if<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-v\">raspbian<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">wheezy<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">img <\/span><span class=\"crayon-v\">of<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">dev<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">mmcblk0<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>This command will take a few minutes to complete. Once it does run <span id=\"crayon-59117ffcebfc0661193577\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-v\">sync<\/span><\/span><\/span>\u00a0to flush all cache to disk and make sure it is safe to remove the device. You\u2019ll then boot up into Raspbian, re-size the image to the full size of your MicroSD, set a memorable password, overclock if you want.<\/p>\n<p>Once this is done there are a few modifications to make. We\u2019ll get into this in the installation section below. I don\u2019t recommend using too large of a MicroSD as later in this tutorial we will image the whole OS from our first MicroSD for deployment to our other Pi nodes.<\/p>\n<h2>Hardware Limitations<\/h2>\n<p>The first limitation to consider is overall storage space. Ceph OSD processes require roughly 1MB of RAM per GB of storage. Since we are co-locating monitor processes the effective storage limitation is 512GB per Pi 2 B (4 x 128GB sticks) RAW (before Ceph replication or erasure coding overhead). Network speed is also a factor as discussed later in document. You will hit network speed limitations before you hit the speed limitations of the Pi 2 B\u2019s single USB 2.0 bus (480Mbit).<\/p>\n<h2>Network<\/h2>\n<p>In this setup I used empty ports on my router. I run a local DNS server on my home router and use static assignments for local DNS. You may want to consider just using a flat 5 or 8 port (depending on number of nodes you plan to have) gigabit switch for the cluster network and WiPi modules for the public (connected to your router via WiFi). The nice thing about using a flat layer 2 switch is that if all the Pi nodes are in the same subnet, you don\u2019t have to worry about a gateway and it also keeps the cost down (compared to using router ports) while reducing the network overhead (for Ceph replication) on your home network. Using a dedicated switch for the cluster network will also increase your cluster performance, especially considering the 100Mbit limitations of the Pi 2 B\u2019s network port. By using a\u00a0<a href=\"http:\/\/thepihut.com\/products\/usb-wifi-adapter-for-the-raspberry-pi\">BGN Dongle for Pi<\/a>\u00a0\u00a0and a dedicated switch for the cluster network, you will get a speedier\u00a0cluster. This will use one of your 4 USB ports and thus, you will get one less OSD per Pi. Keep in mind, depending on if you use replication or erasure coding private\u00a0traffic can be 1-X times greater then client IO \u00a0(X being 3 in a standard replication profile) if that matters for your application. Of course this is all optional and for additional \u201cclustery goodness\u201d. It really depends on budget, usage \u2013 etcetera.<\/p>\n<h2>Object Storage Daemons<\/h2>\n<p>In this guide, I co-located OSD journals on the OSD drives. For better performance, you can use a faster USB like the SanDisk Extreme 3.0 (keep in mind that you\u2019ll be limited by the 60MB\/s speed of USB 2.0). Using a dedicated (faster) journal drive will yield much better performance. But you don\u2019t really need to worry about it unless you are using multiple networks as outlined above. If you are not, 4 decent USB sticks will saturate your 100Mbit NIC per node. There is a lot more to learn about Ceph architecture that I cover in this article and I highly recommend you do so <a href=\"http:\/\/ceph.com\/docs\/v0.80.5\/\">here<\/a>.<\/p>\n<h3>OSD Filesystem<\/h3>\n<p>XFS is the default in Ceph Firefly. I prefer <a href=\"https:\/\/btrfs.wiki.kernel.org\/index.php\/Main_Page\">BTRFS<\/a>\u00a0as an OSD filesystem for multi-fold reasons and I use it in this tutorial.<\/p>\n<h2>Installation<\/h2>\n<p>Assuming you have setup your network and operating system \u2013 have 3 nodes and the hardware you want to use \u2013 we can begin. The first thing to do is wire up power and network as you see fit. After that, you\u2019ll want to run through the initial <span id=\"crayon-59117ffcebfc4995329598\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-v\">raspi<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">config<\/span><\/span><\/span>\u00a0on what will become your admin node. Then it\u2019s time to make some changes. Once your admin node is booted and configured, you have\u00a0to edit <span id=\"crayon-59117ffcebfc7094696522\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">etc<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">apt<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">sources<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">list<\/span><\/span><\/span>\u00a0. Raspbian Wheezy has archaic versions of Ceph in the main repository, but the latest firefly version in the testing repository. Before we delve into this, I find it useful to install some basic tools and requirements. Connect via SSH or directly to terminal and issue\u00a0this command from the Pi:<\/p>\n<div id=\"crayon-59117ffcebfca680213402\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">sudo apt-get install vim screen htop iotop btrfs-tools lsb-release gdisk<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebfca680213402-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcebfca680213402-1\" class=\"crayon-line\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">apt<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-e\">get <\/span><span class=\"crayon-e\">install <\/span><span class=\"crayon-e\">vim <\/span><span class=\"crayon-e\">screen <\/span><span class=\"crayon-e\">htop <\/span><span class=\"crayon-e\">iotop <\/span><span class=\"crayon-v\">btrfs<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-e\">tools <\/span><span class=\"crayon-v\">lsb<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-e\">release <\/span><span class=\"crayon-v\">gdisk<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>From this point forward we will assume you are connecting to your Pi nodes via SSH. You\u2019ve just installed BTRFS-tools, vim (better then vi) and some performance diagnostics tools I like. Now that we have <span id=\"crayon-59117ffcebfcd604740794\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-v\">vim<\/span><\/span><\/span>\u00a0 it\u2019s time to edit our sources:<\/p>\n<div id=\"crayon-59117ffcebfd0471371932\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">vi \/etc\/apt\/sources.list<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebfd0471371932-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcebfd0471371932-1\" class=\"crayon-line\"><span class=\"crayon-v\">vi<\/span> <span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">etc<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">apt<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">sources<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">list<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>You\u2019ll see the contents of your sources file. Which will look like this:<\/p>\n<div id=\"crayon-59117ffcebfd3210342871\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">deb http:\/\/mirrordirector.raspbian.org\/raspbian\/ wheezy main contrib non-free rpi&lt;br \/&gt;<br \/>\n# Uncomment line below then &#8216;apt-get update&#8217; to enable &#8216;apt-get source'&lt;br \/&gt;<br \/>\n#deb-src http:\/\/archive.raspbian.org\/raspbian\/ wheezy main contrib non-free rpi<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebfd3210342871-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcebfd3210342871-2\">2<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebfd3210342871-3\">3<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcebfd3210342871-1\" class=\"crayon-line\"><span class=\"crayon-e\">deb <\/span><span class=\"crayon-v\">http<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-c\">\/\/mirrordirector.raspbian.org\/raspbian\/ wheezy main contrib non-free rpi<\/span><\/div>\n<div id=\"crayon-59117ffcebfd3210342871-2\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-p\"># Uncomment line below then &#8216;apt-get update&#8217; to enable &#8216;apt-get source&#8217;<\/span><\/div>\n<div id=\"crayon-59117ffcebfd3210342871-3\" class=\"crayon-line\"><span class=\"crayon-p\">#deb-src http:\/\/archive.raspbian.org\/raspbian\/ wheezy main contrib non-free rpi<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Modify it to look like this:<\/p>\n<div id=\"crayon-59117ffcebfd6232780794\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">deb http:\/\/mirrordirector.raspbian.org\/raspbian\/ testing main contrib non-free rpi&lt;br \/&gt;<br \/>\n# Uncomment line below then &#8216;apt-get update&#8217; to enable &#8216;apt-get source'&lt;br \/&gt;<br \/>\n#deb-src http:\/\/archive.raspbian.org\/raspbian\/ testing main contrib non-free rpi<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebfd6232780794-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcebfd6232780794-2\">2<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebfd6232780794-3\">3<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcebfd6232780794-1\" class=\"crayon-line\"><span class=\"crayon-e\">deb <\/span><span class=\"crayon-v\">http<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-c\">\/\/mirrordirector.raspbian.org\/raspbian\/ testing main contrib non-free rpi<\/span><\/div>\n<div id=\"crayon-59117ffcebfd6232780794-2\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-p\"># Uncomment line below then &#8216;apt-get update&#8217; to enable &#8216;apt-get source&#8217;<\/span><\/div>\n<div id=\"crayon-59117ffcebfd6232780794-3\" class=\"crayon-line\"><span class=\"crayon-p\">#deb-src http:\/\/archive.raspbian.org\/raspbian\/ testing main contrib non-free rpi<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>We\u2019ve replaced <span id=\"crayon-59117ffcebfd9877012643\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-v\">wheezy<\/span><\/span><\/span>\u00a0 with <span id=\"crayon-59117ffcebfdc638977192\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-v\">testing<\/span><\/span><\/span>\u00a0.Once this is done,\u00a0then issue this command:<\/p>\n<div id=\"crayon-59117ffcebfde665002499\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">sudo apt-get update<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebfde665002499-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcebfde665002499-1\" class=\"crayon-line\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">apt<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-e\">get <\/span><span class=\"crayon-v\">update<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Once this process has completed is time to start getting the OS ready for Ceph. Everything we do in this section up to the point of imaging the OS is needed for nodes that will run Ceph.<\/p>\n<p>First we will create a ceph user and give it password-less sudo access. To do so issue these commands:<\/p>\n<div id=\"crayon-59117ffcebfe1368903373\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">ssh user@ceph-server&lt;br \/&gt;<br \/>\nsudo useradd -d \/home\/ceph -m ceph&lt;br \/&gt;<br \/>\nsudo passwd ceph<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebfe1368903373-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcebfe1368903373-2\">2<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebfe1368903373-3\">3<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcebfe1368903373-1\" class=\"crayon-line\"><span class=\"crayon-e\">ssh <\/span><span class=\"crayon-v\">user<\/span><span class=\"crayon-sy\">@<\/span><span class=\"crayon-v\">ceph<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-e\">server<\/span><\/div>\n<div id=\"crayon-59117ffcebfe1368903373-2\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">useradd<\/span> <span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">d<\/span> <span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">home<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ceph<\/span> <span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-i\">m<\/span> <span class=\"crayon-e\">ceph<\/span><\/div>\n<div id=\"crayon-59117ffcebfe1368903373-3\" class=\"crayon-line\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-e\">passwd <\/span><span class=\"crayon-v\">ceph<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Set the password to a memorable one as it will be used on all of your nodes in this guide. Now we need to give the ceph user sudo access<\/p>\n<div id=\"crayon-59117ffcebfe4706060867\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">echo &#8220;ceph ALL = (root) NOPASSWD:ALL&#8221; | sudo tee \/etc\/sudoers.d\/ceph&lt;br \/&gt;<br \/>\nsudo chmod 0440 \/etc\/sudoers.d\/ceph<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebfe4706060867-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcebfe4706060867-2\">2<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcebfe4706060867-1\" class=\"crayon-line\"><span class=\"crayon-i\">echo<\/span> <span class=\"crayon-s\">&#8220;ceph ALL = (root) NOPASSWD:ALL&#8221;<\/span> <span class=\"crayon-o\">|<\/span> <span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">tee<\/span> <span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">etc<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">sudoers<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">d<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-e\">ceph<\/span><\/div>\n<div id=\"crayon-59117ffcebfe4706060867-2\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-i\">chmod<\/span> <span class=\"crayon-cn\">0440<\/span> <span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">etc<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">sudoers<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">d<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ceph<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>We\u2019ll be using ceph-deploy later and it\u2019s best to have a defult user to login as all the time. Issue this command:<\/p>\n<div id=\"crayon-59117ffcebfe7969709704\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">mkdir -p ~\/.ssh\/<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebfe7969709704-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcebfe7969709704-1\" class=\"crayon-line\"><span class=\"crayon-v\">mkdir<\/span> <span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">p<\/span> <span class=\"crayon-o\">~<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">ssh<\/span><span class=\"crayon-o\">\/<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Then create\u00a0this file using vi:<\/p>\n<div id=\"crayon-59117ffcebfe9723638148\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">vi ~\/.ssh\/config<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebfe9723638148-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcebfe9723638148-1\" class=\"crayon-line\"><span class=\"crayon-v\">vi<\/span> <span class=\"crayon-o\">~<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">ssh<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">config<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>I assume 3 nodes in this tutorial and a naming\u00a0convention of piY, where Y is the node number starting from 1.<\/p>\n<div id=\"crayon-59117ffcebfec385084801\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">Host pi1&lt;br \/&gt;<br \/>\n   Hostname pi1&lt;br \/&gt;<br \/>\n   User ceph&lt;br \/&gt;<br \/>\nHost pi2&lt;br \/&gt;<br \/>\n   Hostname pi2&lt;br \/&gt;<br \/>\n   User ceph&lt;br \/&gt;<br \/>\nHost pi3&lt;br \/&gt;<br \/>\n   Hostname pi3&lt;br \/&gt;<br \/>\n   User ceph<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebfec385084801-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcebfec385084801-2\">2<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebfec385084801-3\">3<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcebfec385084801-4\">4<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebfec385084801-5\">5<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcebfec385084801-6\">6<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebfec385084801-7\">7<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcebfec385084801-8\">8<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebfec385084801-9\">9<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcebfec385084801-1\" class=\"crayon-line\"><span class=\"crayon-e\">Host <\/span><span class=\"crayon-e\">pi1\u00a0\u00a0<\/span><\/div>\n<div id=\"crayon-59117ffcebfec385084801-2\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-e\">\u00a0\u00a0 <\/span><span class=\"crayon-e\">Hostname <\/span><span class=\"crayon-e\">pi1\u00a0\u00a0<\/span><\/div>\n<div id=\"crayon-59117ffcebfec385084801-3\" class=\"crayon-line\"><span class=\"crayon-e\">\u00a0\u00a0 <\/span><span class=\"crayon-e\">User <\/span><span class=\"crayon-e\">ceph\u00a0\u00a0<\/span><\/div>\n<div id=\"crayon-59117ffcebfec385084801-4\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-e\">Host <\/span><span class=\"crayon-e\">pi2\u00a0\u00a0<\/span><\/div>\n<div id=\"crayon-59117ffcebfec385084801-5\" class=\"crayon-line\"><span class=\"crayon-e\">\u00a0\u00a0 <\/span><span class=\"crayon-e\">Hostname <\/span><span class=\"crayon-e\">pi2\u00a0\u00a0<\/span><\/div>\n<div id=\"crayon-59117ffcebfec385084801-6\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-e\">\u00a0\u00a0 <\/span><span class=\"crayon-e\">User <\/span><span class=\"crayon-e\">ceph\u00a0\u00a0<\/span><\/div>\n<div id=\"crayon-59117ffcebfec385084801-7\" class=\"crayon-line\"><span class=\"crayon-e\">Host <\/span><span class=\"crayon-e\">pi3\u00a0\u00a0<\/span><\/div>\n<div id=\"crayon-59117ffcebfec385084801-8\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-e\">\u00a0\u00a0 <\/span><span class=\"crayon-e\">Hostname <\/span><span class=\"crayon-e\">pi3\u00a0\u00a0<\/span><\/div>\n<div id=\"crayon-59117ffcebfec385084801-9\" class=\"crayon-line\"><span class=\"crayon-e\">\u00a0\u00a0 <\/span><span class=\"crayon-e\">User <\/span><span class=\"crayon-v\">ceph<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Save the file and exit. As far as hostnames, you can use whatever you want of course. As I mentioned, I run local DNS and DHCP with static assignments. If you do not, you\u2019ll need to edit <span id=\"crayon-59117ffcebfef339685212\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">etc<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">hosts<\/span><\/span><\/span>\u00a0 so that your nodes can resolve each-other.\u00a0You can do this after the OS image, as each node will have a different IP.<\/p>\n<p>Now it\u2019s time to install the <span id=\"crayon-59117ffcebff2783655513\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-v\">ceph<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">deploy<\/span><\/span><\/span>\u00a0tool. Raspbian <span id=\"crayon-59117ffcebff4536968481\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-v\">wget<\/span><\/span><\/span>\u00a0 can be strange with HTTPS so we will ignore the certificate (do so at your own peril):<\/p>\n<div id=\"crayon-59117ffcebff7967046335\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">wget &#8211;no-check-certificate -q -O- &#8216;https:\/\/ceph.com\/git\/?p=ceph.git;a=blob_plain;f=keys\/release.asc&#8217; | sudo apt-key add -&lt;br \/&gt;<br \/>\necho deb http:\/\/ceph.com\/debian-firefly\/ wheezy main | sudo tee \/etc\/apt\/sources.list.d\/ceph.list<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebff7967046335-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcebff7967046335-2\">2<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcebff7967046335-1\" class=\"crayon-line\"><span class=\"crayon-v\">wget<\/span> <span class=\"crayon-o\">&#8212;<\/span><span class=\"crayon-v\">no<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">check<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">certificate<\/span> <span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">q<\/span> <span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">O<\/span><span class=\"crayon-o\">&#8211;<\/span> <span class=\"crayon-s\">&#8216;https:\/\/ceph.com\/git\/?p=ceph.git;a=blob_plain;f=keys\/release.asc&#8217;<\/span> <span class=\"crayon-o\">|<\/span> <span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">apt<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-e\">key <\/span><span class=\"crayon-v\">add<\/span> <span class=\"crayon-o\">&#8211;<\/span><\/div>\n<div id=\"crayon-59117ffcebff7967046335-2\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-e\">echo <\/span><span class=\"crayon-e\">deb <\/span><span class=\"crayon-v\">http<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-c\">\/\/ceph.com\/debian-firefly\/ wheezy main | sudo tee \/etc\/apt\/sources.list.d\/ceph.list<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Now that we\u2019ve added the Ceph repository, we can install ceph-deploy:<\/p>\n<div id=\"crayon-59117ffcebffa707309134\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">sudo apt-get update &amp;&amp; sudo apt-get install ceph-deploy ceph ceph-common<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebffa707309134-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcebffa707309134-1\" class=\"crayon-line\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">apt<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-e\">get <\/span><span class=\"crayon-v\">update<\/span> <span class=\"crayon-o\">&amp;&amp;<\/span> <span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">apt<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-e\">get <\/span><span class=\"crayon-e\">install <\/span><span class=\"crayon-v\">ceph<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-e\">deploy <\/span><span class=\"crayon-e\">ceph <\/span><span class=\"crayon-v\">ceph<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">common<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Since we are installing ceph from the Raspbian repositories, we need to change the default behavior of ceph-deploy:<\/p>\n<div id=\"crayon-59117ffcebffd910923005\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">sudo vi \/usr\/share\/pyshared\/ceph_deploy\/hosts\/debian\/install.py<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebffd910923005-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcebffd910923005-1\" class=\"crayon-line\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">vi<\/span> <span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">usr<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">share<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">pyshared<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ceph_deploy<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">hosts<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">debian<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">install<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">py<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Change<\/p>\n<div id=\"crayon-59117ffcebfff044236618\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\"> def install(distro, version_kind, version, adjust_repos):&lt;br \/&gt;<br \/>\n   codename = distro.codename&lt;br \/&gt;<br \/>\n   machine = distro.machine_type<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebfff044236618-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcebfff044236618-2\">2<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcebfff044236618-3\">3<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcebfff044236618-1\" class=\"crayon-line\"><span class=\"crayon-e\">def <\/span><span class=\"crayon-e\">install<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">distro<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">version_kind<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">version<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">adjust_repos<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\">\u00a0\u00a0<\/span><\/div>\n<div id=\"crayon-59117ffcebfff044236618-2\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-v\">codename<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-v\">distro<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">codename\u00a0\u00a0<\/span><\/div>\n<div id=\"crayon-59117ffcebfff044236618-3\" class=\"crayon-line\"><span class=\"crayon-e\">\u00a0\u00a0 <\/span><span class=\"crayon-v\">machine<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-v\">distro<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">machine_type<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>To<\/p>\n<div id=\"crayon-59117ffcec002099042296\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\"> def install(distro, version_kind, version, adjust_repos):&lt;br \/&gt;<br \/>\n   adjust_repos = False&lt;br \/&gt;<br \/>\n   codename = distro.codename&lt;br \/&gt;<br \/>\n   machine = distro.machine_type<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec002099042296-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec002099042296-2\">2<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec002099042296-3\">3<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec002099042296-4\">4<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcec002099042296-1\" class=\"crayon-line\"><span class=\"crayon-e\">def <\/span><span class=\"crayon-e\">install<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">distro<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">version_kind<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">version<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">adjust_repos<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\">\u00a0\u00a0<\/span><\/div>\n<div id=\"crayon-59117ffcec002099042296-2\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-v\">adjust_repos<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-t\">False<\/span><\/div>\n<div id=\"crayon-59117ffcec002099042296-3\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-v\">codename<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-v\">distro<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">codename\u00a0\u00a0<\/span><\/div>\n<div id=\"crayon-59117ffcec002099042296-4\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-e\">\u00a0\u00a0 <\/span><span class=\"crayon-v\">machine<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-v\">distro<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">machine_type<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>This will prevent ceph-deploy from altering repos as the Ceph armhf (Rasberry Pi\u2019s processor type) repos are mostly empty.<\/p>\n<p>Finally, we should revert the contents of <span id=\"crayon-59117ffcec005537308685\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">etc<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">apt<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">sources<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">list<\/span><\/span><\/span>\u00a0:<\/p>\n<div id=\"crayon-59117ffcec008616251302\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">sudo vi \/etc\/apt\/sources.list<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec008616251302-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcec008616251302-1\" class=\"crayon-line\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">vi<\/span> <span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">etc<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">apt<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">sources<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">list<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>You\u2019ll see the contents of your sources file. Which will look like this:<\/p>\n<div id=\"crayon-59117ffcec00a523722882\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">deb http:\/\/mirrordirector.raspbian.org\/raspbian\/ testing main contrib non-free rpi&lt;br \/&gt;<br \/>\n# Uncomment line below then &#8216;apt-get update&#8217; to enable &#8216;apt-get source'&lt;br \/&gt;<br \/>\n#deb-src http:\/\/archive.raspbian.org\/raspbian\/ testing main contrib non-free rpi<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec00a523722882-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec00a523722882-2\">2<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec00a523722882-3\">3<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcec00a523722882-1\" class=\"crayon-line\"><span class=\"crayon-e\">deb <\/span><span class=\"crayon-v\">http<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-c\">\/\/mirrordirector.raspbian.org\/raspbian\/ testing main contrib non-free rpi<\/span><\/div>\n<div id=\"crayon-59117ffcec00a523722882-2\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-p\"># Uncomment line below then &#8216;apt-get update&#8217; to enable &#8216;apt-get source&#8217;<\/span><\/div>\n<div id=\"crayon-59117ffcec00a523722882-3\" class=\"crayon-line\"><span class=\"crayon-p\">#deb-src http:\/\/archive.raspbian.org\/raspbian\/ testing main contrib non-free rpi<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Modify it to look like this:<\/p>\n<div id=\"crayon-59117ffcec00d308884452\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">deb http:\/\/mirrordirector.raspbian.org\/raspbian\/ wheezy main contrib non-free rpi&lt;br \/&gt;<br \/>\n# Uncomment line below then &#8216;apt-get update&#8217; to enable &#8216;apt-get source'&lt;br \/&gt;<br \/>\n#deb-src http:\/\/archive.raspbian.org\/raspbian\/ wheezy main contrib non-free rpi<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec00d308884452-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec00d308884452-2\">2<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec00d308884452-3\">3<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcec00d308884452-1\" class=\"crayon-line\"><span class=\"crayon-e\">deb <\/span><span class=\"crayon-v\">http<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-c\">\/\/mirrordirector.raspbian.org\/raspbian\/ wheezy main contrib non-free rpi<\/span><\/div>\n<div id=\"crayon-59117ffcec00d308884452-2\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-p\"># Uncomment line below then &#8216;apt-get update&#8217; to enable &#8216;apt-get source&#8217;<\/span><\/div>\n<div id=\"crayon-59117ffcec00d308884452-3\" class=\"crayon-line\"><span class=\"crayon-p\">#deb-src http:\/\/archive.raspbian.org\/raspbian\/ wheezy main contrib non-free rpi<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p>We\u2019ve replaced <span id=\"crayon-59117ffcec010951891451\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-v\">testing<\/span><\/span><\/span>\u00a0 with <span id=\"crayon-59117ffcec012976096403\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-v\">wheezy<\/span><\/span><\/span>\u00a0.Once this is done,\u00a0then issue this command:<\/p>\n<div id=\"crayon-59117ffcec015175346224\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">sudo apt-get update<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec015175346224-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcec015175346224-1\" class=\"crayon-line\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">apt<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-e\">get <\/span><span class=\"crayon-v\">update<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<h2>Kernel Tweaks<\/h2>\n<p>We are also going to tweak some kernel parameters for better stability. To do so we will\u00a0edit <span id=\"crayon-59117ffcec018468932225\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">etc<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">sysctl<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">conf<\/span><\/span><\/span>\u00a0.<\/p>\n<div id=\"crayon-59117ffcec01a913282570\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">vi \/etc\/sysctl.conf<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec01a913282570-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcec01a913282570-1\" class=\"crayon-line\"><span class=\"crayon-v\">vi<\/span> <span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">etc<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">sysctl<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">conf<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>At the bottom of the file, change\u00a0add the following lines:<\/p>\n<div id=\"crayon-59117ffcec01d988587046\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">vm.swappiness=1&lt;br \/&gt;<br \/>\nvm.min_free_kbytes = 32768&lt;br \/&gt;<br \/>\nkernel.pid_max = 32768<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec01d988587046-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec01d988587046-2\">2<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec01d988587046-3\">3<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcec01d988587046-1\" class=\"crayon-line\"><span class=\"crayon-v\">vm<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">swappiness<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-cn\">1<\/span><\/div>\n<div id=\"crayon-59117ffcec01d988587046-2\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-v\">vm<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">min_free_kbytes<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">32768<\/span><\/div>\n<div id=\"crayon-59117ffcec01d988587046-3\" class=\"crayon-line\"><span class=\"crayon-v\">kernel<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">pid_max<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">32768<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2>Imaging the OS<\/h2>\n<p>Now we have a good baseline for deploying ceph to our other Pi nodes. It\u2019s time to stop our admin node and image the drive (MicroSD). Issue:<\/p>\n<div id=\"crayon-59117ffcec020079167313\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">sudo halt<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec020079167313-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcec020079167313-1\" class=\"crayon-line\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-v\">halt<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Then unplug power to your Pi node and remove the MicroSD. Insert the microSD in your SD adapter, then the SD adapter into your Linux PC. You\u2019ll need at least as much free drive space on your PC as the size of the MicroSD card.Where \/dev\/mmcblk0 is your SD card and pi-ceph.img is your image destination, run:<\/p>\n<div id=\"crayon-59117ffcec023054406602\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">sudo dd if=\/dev\/mmcblk0 of=ceph-pi.img bs=4M<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec023054406602-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcec023054406602-1\" class=\"crayon-line\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-e\">dd <\/span><span class=\"crayon-st\">if<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">dev<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-e\">mmcblk0 <\/span><span class=\"crayon-v\">of<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-v\">ceph<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">pi<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">img <\/span><span class=\"crayon-v\">bs<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-cn\">4M<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>This can take a vary long time depending on the size of your SD and you can compress it with <span id=\"crayon-59117ffcec026731032296\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-v\">gzip<\/span><\/span><\/span>\u00a0 or <span id=\"crayon-59117ffcec028630241557\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-v\">xz<\/span><\/span><\/span>\u00a0 for long term storage (empty space compresses really well it turns out). Once the command returns, run <span id=\"crayon-59117ffcec02b404624056\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-v\">sync<\/span><\/span><\/span>\u00a0 to flush the cache to disk and make sure you can remove the MicroSD<\/p>\n<h2>Imaging Your Nodes OS Drives<\/h2>\n<p>Now that you have a good baseline image on your PC, you are ready to crank out \u201cCeph-Pi\u201d nodes \u2013 without redoing all of the above. To do so, insert a fresh MicroSD into your adapter and then PC. Then assuming <span id=\"crayon-59117ffcec02e141269268\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-v\">ceph<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">pi<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">img<\/span><\/span><\/span>\u00a0 is your OS image and <span id=\"crayon-59117ffcec030495831560\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">dev<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">mmcblk0<\/span><\/span><\/span>\u00a0is your MicroSD\u00a0card run:<\/p>\n<div id=\"crayon-59117ffcec033221208384\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">sudo dd if=ceph-pi.img of=\/dev\/mmcblk0 bs=4M<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec033221208384-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcec033221208384-1\" class=\"crayon-line\"><span class=\"crayon-e\">sudo <\/span><span class=\"crayon-e\">dd <\/span><span class=\"crayon-st\">if<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-v\">ceph<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">pi<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">img <\/span><span class=\"crayon-v\">of<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">dev<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-e\">mmcblk0 <\/span><span class=\"crayon-v\">bs<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-cn\">4M<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Repeat this for a many nodes as you intend to deploy.<\/p>\n<h2>Create\u00a0a Ceph Cluster on Raspberry Pi<\/h2>\n<p>Insert your ceph-pi MicroSD cards into your Pi nodes and power them all on. You\u2019ve made it this far, now it\u2019s time to get \u201ccephy\u201d. Deploying with ceph-deploy is a breeze. First we need to SSH to our admin node, make sure you have setup IPs, network and <span id=\"crayon-59117ffcec036465943025\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">etc<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">hosts<\/span><\/span><\/span>\u00a0on all Pi nodes if you are not using local DNS and DHCP with static assignments.<\/p>\n<p>We need to generate and distribute an SSH key for password-less authentication between nodes. To do so run (leave the password blank):<\/p>\n<div id=\"crayon-59117ffcec039509675812\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">ssh-keygen&lt;br \/&gt;<br \/>\nGenerating public\/private key pair.&lt;br \/&gt;<br \/>\nEnter file in which to save the key (\/ceph-client\/.ssh\/id_rsa):&lt;br \/&gt;<br \/>\nEnter passphrase (empty for no passphrase):&lt;br \/&gt;<br \/>\nEnter same passphrase again:&lt;br \/&gt;<br \/>\nYour identification has been saved in \/ceph-client\/.ssh\/id_rsa.&lt;br \/&gt;<br \/>\nYour public key has been saved in \/ceph-client\/.ssh\/id_rsa.pub.<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec039509675812-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec039509675812-2\">2<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec039509675812-3\">3<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec039509675812-4\">4<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec039509675812-5\">5<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec039509675812-6\">6<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec039509675812-7\">7<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcec039509675812-1\" class=\"crayon-line\"><span class=\"crayon-v\">ssh<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-e\">keygen<\/span><\/div>\n<div id=\"crayon-59117ffcec039509675812-2\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-e\">Generating <\/span><span class=\"crayon-m\">public<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-m\">private<\/span> <span class=\"crayon-e\">key <\/span><span class=\"crayon-v\">pair<\/span><span class=\"crayon-sy\">.<\/span><\/div>\n<div id=\"crayon-59117ffcec039509675812-3\" class=\"crayon-line\"><span class=\"crayon-e\">Enter <\/span><span class=\"crayon-e\">file <\/span><span class=\"crayon-st\">in<\/span> <span class=\"crayon-e\">which <\/span><span class=\"crayon-st\">to<\/span> <span class=\"crayon-e\">save <\/span><span class=\"crayon-e\">the <\/span><span class=\"crayon-e\">key<\/span> <span class=\"crayon-sy\">(<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ceph<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">client<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">ssh<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">id_rsa<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-o\">:<\/span><\/div>\n<div id=\"crayon-59117ffcec039509675812-4\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-e\">Enter <\/span><span class=\"crayon-e\">passphrase<\/span> <span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">empty <\/span><span class=\"crayon-st\">for<\/span> <span class=\"crayon-e\">no <\/span><span class=\"crayon-v\">passphrase<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-o\">:<\/span><\/div>\n<div id=\"crayon-59117ffcec039509675812-5\" class=\"crayon-line\"><span class=\"crayon-e\">Enter <\/span><span class=\"crayon-e\">same <\/span><span class=\"crayon-e\">passphrase <\/span><span class=\"crayon-v\">again<\/span><span class=\"crayon-o\">:<\/span><\/div>\n<div id=\"crayon-59117ffcec039509675812-6\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-e\">Your <\/span><span class=\"crayon-e\">identification <\/span><span class=\"crayon-e\">has <\/span><span class=\"crayon-e\">been <\/span><span class=\"crayon-e\">saved <\/span><span class=\"crayon-st\">in<\/span> <span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ceph<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">client<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">ssh<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">id_rsa<\/span><span class=\"crayon-sy\">.<\/span><\/div>\n<div id=\"crayon-59117ffcec039509675812-7\" class=\"crayon-line\"><span class=\"crayon-e\">Your <\/span><span class=\"crayon-m\">public<\/span> <span class=\"crayon-e\">key <\/span><span class=\"crayon-e\">has <\/span><span class=\"crayon-e\">been <\/span><span class=\"crayon-e\">saved <\/span><span class=\"crayon-st\">in<\/span> <span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ceph<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">client<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">ssh<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">id_rsa<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">pub<\/span><span class=\"crayon-sy\">.<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Now copy the key to all nodes (assuming 3 with the naming convention from above):<\/p>\n<div id=\"crayon-59117ffcec03c625197426\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">ssh-copy-id ceph@pi1&lt;br \/&gt;<br \/>\nssh-copy-id ceph@pi2&lt;br \/&gt;<br \/>\nssh-copy-id ceph@pi3<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec03c625197426-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec03c625197426-2\">2<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec03c625197426-3\">3<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcec03c625197426-1\" class=\"crayon-line\"><span class=\"crayon-v\">ssh<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">copy<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-e\">id <\/span><span class=\"crayon-v\">ceph<\/span><span class=\"crayon-sy\">@<\/span><span class=\"crayon-e\">pi1\u00a0\u00a0<\/span><\/div>\n<div id=\"crayon-59117ffcec03c625197426-2\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-v\">ssh<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">copy<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-e\">id <\/span><span class=\"crayon-v\">ceph<\/span><span class=\"crayon-sy\">@<\/span><span class=\"crayon-e\">pi2\u00a0\u00a0<\/span><\/div>\n<div id=\"crayon-59117ffcec03c625197426-3\" class=\"crayon-line\"><span class=\"crayon-v\">ssh<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">copy<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-e\">id <\/span><span class=\"crayon-v\">ceph<\/span><span class=\"crayon-sy\">@<\/span><span class=\"crayon-v\">pi3<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>You will be prompted for the password you created for the ceph user each time to establish initial authentication.<\/p>\n<p>Once that is done and you are connected to your admin node (1st node in the cluster) as the <span id=\"crayon-59117ffcec03f313956548\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-v\">pi<\/span><\/span><\/span>\u00a0user you\u2019ll want to create an admin node directory:<\/p>\n<div id=\"crayon-59117ffcec041647612508\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">mkdir -p ~\/ceph-pi-cluster&lt;br \/&gt;<br \/>\ncd ~\/ceph-pi-cluster<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec041647612508-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec041647612508-2\">2<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcec041647612508-1\" class=\"crayon-line\"><span class=\"crayon-v\">mkdir<\/span> <span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">p<\/span> <span class=\"crayon-o\">~<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ceph<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">pi<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-e\">cluster<\/span><\/div>\n<div id=\"crayon-59117ffcec041647612508-2\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-v\">cd<\/span> <span class=\"crayon-o\">~<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ceph<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">pi<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">cluster<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>Creating an initial Ceph Configuration<\/h3>\n<p>We are going to create an initial Ceph configuration assuming all 3 pi nodes as monitors. If you have more, keep in mind \u2013 you always want an odd number of monitors to avoid a <a href=\"http:\/\/en.wikipedia.org\/wiki\/Split-brain_%28computing%29\">split-brain<\/a> scenario. To to this run:<\/p>\n<div id=\"crayon-59117ffcec044568044497\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">ceph-deploy new pi1 pi2 pi3<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec044568044497-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcec044568044497-1\" class=\"crayon-line\"><span class=\"crayon-v\">ceph<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-e\">deploy <\/span><span class=\"crayon-r\">new<\/span> <span class=\"crayon-e\">pi1 <\/span><span class=\"crayon-e\">pi2 <\/span><span class=\"crayon-v\">pi3<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Now there are some special tweaks that should be made for best stability and performance within the hardware limitations of the Raspberry Pi 2 B. To apply these changes we\u2019ll need to edit the <span id=\"crayon-59117ffcec047296691217\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-v\">ceph<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">conf<\/span><\/span><\/span>\u00a0here on the admin node before it is distributed. To do so:<\/p>\n<div id=\"crayon-59117ffcec04a463773220\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">vi ~\/ceph-pi-cluster\/ceph.conf<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04a463773220-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcec04a463773220-1\" class=\"crayon-line\"><span class=\"crayon-v\">vi<\/span> <span class=\"crayon-o\">~<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ceph<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">pi<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">cluster<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ceph<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">conf<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>After the existing lines add:<\/p>\n<div id=\"crayon-59117ffcec04c299234439\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">  # Disable in-memory logs&lt;br \/&gt;<br \/>\n  debug_lockdep = 0\/0&lt;br \/&gt;<br \/>\n  debug_context = 0\/0&lt;br \/&gt;<br \/>\n  debug_crush = 0\/0&lt;br \/&gt;<br \/>\n  debug_buffer = 0\/0&lt;br \/&gt;<br \/>\n  debug_timer = 0\/0&lt;br \/&gt;<br \/>\n  debug_filer = 0\/0&lt;br \/&gt;<br \/>\n  debug_objecter = 0\/0&lt;br \/&gt;<br \/>\n  debug_rados = 0\/0&lt;br \/&gt;<br \/>\n  debug_rbd = 0\/0&lt;br \/&gt;<br \/>\n  debug_journaler = 0\/0&lt;br \/&gt;<br \/>\n  debug_objectcatcher = 0\/0&lt;br \/&gt;<br \/>\n  debug_client = 0\/0&lt;br \/&gt;<br \/>\n  debug_osd = 0\/0&lt;br \/&gt;<br \/>\n  debug_optracker = 0\/0&lt;br \/&gt;<br \/>\n  debug_objclass = 0\/0&lt;br \/&gt;<br \/>\n  debug_filestore = 0\/0&lt;br \/&gt;<br \/>\n  debug_journal = 0\/0&lt;br \/&gt;<br \/>\n  debug_ms = 0\/0&lt;br \/&gt;<br \/>\n  debug_monc = 0\/0&lt;br \/&gt;<br \/>\n  debug_tp = 0\/0&lt;br \/&gt;<br \/>\n  debug_auth = 0\/0&lt;br \/&gt;<br \/>\n  debug_finisher = 0\/0&lt;br \/&gt;<br \/>\n  debug_heartbeatmap = 0\/0&lt;br \/&gt;<br \/>\n  debug_perfcounter = 0\/0&lt;br \/&gt;<br \/>\n  debug_asok = 0\/0&lt;br \/&gt;<br \/>\n  debug_throttle = 0\/0&lt;br \/&gt;<br \/>\n  debug_mon = 0\/0&lt;br \/&gt;<br \/>\n  debug_paxos = 0\/0&lt;br \/&gt;<br \/>\n  debug_rgw = 0\/0&lt;br \/&gt;<br \/>\n  osd heartbeat grace = 8&lt;\/p&gt;<br \/>\n&lt;p&gt;[mon]&lt;br \/&gt;<br \/>\n  mon compact on start = true&lt;br \/&gt;<br \/>\n  mon osd down out subtree_limit = host&lt;\/p&gt;<br \/>\n&lt;p&gt;[osd]&lt;br \/&gt;<br \/>\n  # Filesystem Optimizations&lt;br \/&gt;<br \/>\n  osd mkfs type = btrfs&lt;br \/&gt;<br \/>\n  osd journal size = 1024&lt;\/p&gt;<br \/>\n&lt;p&gt;  # Performance tuning&lt;br \/&gt;<br \/>\n  max open files = 327680&lt;br \/&gt;<br \/>\n  osd op threads = 2&lt;br \/&gt;<br \/>\n  filestore op threads = 2&lt;\/p&gt;<br \/>\n&lt;p&gt;  #Capacity Tuning&lt;br \/&gt;<br \/>\n  osd backfill full ratio = 0.95&lt;br \/&gt;<br \/>\n  mon osd nearfull ratio = 0.90&lt;br \/&gt;<br \/>\n  mon osd full ratio = 0.95&lt;\/p&gt;<br \/>\n&lt;p&gt;  # Recovery tuning&lt;br \/&gt;<br \/>\n  osd recovery max active = 1&lt;br \/&gt;<br \/>\n  osd recovery max single start = 1&lt;br \/&gt;<br \/>\n  osd max backfills = 1&lt;br \/&gt;<br \/>\n  osd recovery op priority = 1&lt;\/p&gt;<br \/>\n&lt;p&gt;  # Optimize Filestore Merge and Split&lt;br \/&gt;<br \/>\n  filestore merge threshold = 40&lt;br \/&gt;<br \/>\n  filestore split multiple = 8<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-2\">2<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-3\">3<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-4\">4<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-5\">5<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-6\">6<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-7\">7<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-8\">8<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-9\">9<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-10\">10<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-11\">11<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-12\">12<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-13\">13<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-14\">14<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-15\">15<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-16\">16<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-17\">17<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-18\">18<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-19\">19<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-20\">20<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-21\">21<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-22\">22<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-23\">23<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-24\">24<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-25\">25<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-26\">26<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-27\">27<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-28\">28<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-29\">29<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-30\">30<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-31\">31<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-32\">32<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-33\">33<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-34\">34<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-35\">35<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-36\">36<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-37\">37<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-38\">38<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-39\">39<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-40\">40<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-41\">41<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-42\">42<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-43\">43<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-44\">44<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-45\">45<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-46\">46<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-47\">47<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-48\">48<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-49\">49<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-50\">50<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-51\">51<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-52\">52<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-53\">53<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-54\">54<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-55\">55<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-56\">56<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-57\">57<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-58\">58<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec04c299234439-59\">59<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec04c299234439-60\">60<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcec04c299234439-1\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-p\"># Disable in-memory logs<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-2\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_lockdep<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-3\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_context<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-4\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_crush<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-5\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_buffer<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-6\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_timer<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-7\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_filer<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-8\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_objecter<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-9\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_rados<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-10\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_rbd<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-11\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_journaler<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-12\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_objectcatcher<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-13\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_client<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-14\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_osd<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-15\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_optracker<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-16\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_objclass<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-17\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_filestore<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-18\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_journal<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-19\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_ms<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-20\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_monc<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-21\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_tp<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-22\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_auth<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-23\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_finisher<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-24\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_heartbeatmap<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-25\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_perfcounter<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-26\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_asok<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-27\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_throttle<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-28\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_mon<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-29\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_paxos<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-30\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">debug_rgw<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-31\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-e\">osd <\/span><span class=\"crayon-e\">heartbeat <\/span><span class=\"crayon-v\">grace<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">8<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-32\" class=\"crayon-line crayon-striped-line\"><\/div>\n<div id=\"crayon-59117ffcec04c299234439-33\" class=\"crayon-line\"><span class=\"crayon-sy\">[<\/span><span class=\"crayon-v\">mon<\/span><span class=\"crayon-sy\">]<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-34\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-e\">mon <\/span><span class=\"crayon-e\">compact <\/span><span class=\"crayon-e\">on <\/span><span class=\"crayon-v\">start<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-t\">true<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-35\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-e\">mon <\/span><span class=\"crayon-e\">osd <\/span><span class=\"crayon-e\">down <\/span><span class=\"crayon-e\">out <\/span><span class=\"crayon-v\">subtree_limit<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-i\">host<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-36\" class=\"crayon-line crayon-striped-line\"><\/div>\n<div id=\"crayon-59117ffcec04c299234439-37\" class=\"crayon-line\"><span class=\"crayon-sy\">[<\/span><span class=\"crayon-v\">osd<\/span><span class=\"crayon-sy\">]<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-38\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-p\"># Filesystem Optimizations<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-39\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-e\">osd <\/span><span class=\"crayon-e\">mkfs <\/span><span class=\"crayon-v\">type<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-e\">btrfs<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-40\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-e\">\u00a0\u00a0<\/span><span class=\"crayon-e\">osd <\/span><span class=\"crayon-e\">journal <\/span><span class=\"crayon-v\">size<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">1024<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-41\" class=\"crayon-line\"><\/div>\n<div id=\"crayon-59117ffcec04c299234439-42\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-p\"># Performance tuning<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-43\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-e\">max <\/span><span class=\"crayon-e\">open <\/span><span class=\"crayon-v\">files<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">327680<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-44\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-e\">osd <\/span><span class=\"crayon-e\">op <\/span><span class=\"crayon-v\">threads<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">2<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-45\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-e\">filestore <\/span><span class=\"crayon-e\">op <\/span><span class=\"crayon-v\">threads<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">2<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-46\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-47\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-p\">#Capacity Tuning<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-48\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-e\">osd <\/span><span class=\"crayon-e\">backfill <\/span><span class=\"crayon-e\">full <\/span><span class=\"crayon-v\">ratio<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0.95<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-49\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-e\">mon <\/span><span class=\"crayon-e\">osd <\/span><span class=\"crayon-e\">nearfull <\/span><span class=\"crayon-v\">ratio<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0.90<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-50\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-e\">mon <\/span><span class=\"crayon-e\">osd <\/span><span class=\"crayon-e\">full <\/span><span class=\"crayon-v\">ratio<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0.95<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-51\" class=\"crayon-line\"><\/div>\n<div id=\"crayon-59117ffcec04c299234439-52\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-p\"># Recovery tuning<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-53\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-e\">osd <\/span><span class=\"crayon-e\">recovery <\/span><span class=\"crayon-e\">max <\/span><span class=\"crayon-v\">active<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">1<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-54\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-e\">osd <\/span><span class=\"crayon-e\">recovery <\/span><span class=\"crayon-e\">max <\/span><span class=\"crayon-e\">single <\/span><span class=\"crayon-v\">start<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">1<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-55\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-e\">osd <\/span><span class=\"crayon-e\">max <\/span><span class=\"crayon-v\">backfills<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">1<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-56\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-e\">osd <\/span><span class=\"crayon-e\">recovery <\/span><span class=\"crayon-e\">op <\/span><span class=\"crayon-v\">priority<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">1<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-57\" class=\"crayon-line\"><\/div>\n<div id=\"crayon-59117ffcec04c299234439-58\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-p\"># Optimize Filestore Merge and Split<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-59\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-e\">filestore <\/span><span class=\"crayon-e\">merge <\/span><span class=\"crayon-v\">threshold<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">40<\/span><\/div>\n<div id=\"crayon-59117ffcec04c299234439-60\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-e\">filestore <\/span><span class=\"crayon-e\">split <\/span><span class=\"crayon-v\">multiple<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">8<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<h3>Creating Initial Monitors<\/h3>\n<p>Now we can deploy our spiffy ceph.conf, create our initial monitor daemons, deploy our authentication keyring and chmod it as needed. We will be deploying to all 3 nodes for the purposes of this guide:<\/p>\n<div id=\"crayon-59117ffcec050406578011\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">ceph-deploy mon create-initial&lt;br \/&gt;<br \/>\nceph-deploy admin pi1 pi2 pi3&lt;br \/&gt;<br \/>\nfor i in pi1 pi2 pi3;do ssh $i chmod 644 \/etc\/ceph\/ceph.client.admin.keyring;done<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec050406578011-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-59117ffcec050406578011-2\">2<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec050406578011-3\">3<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcec050406578011-1\" class=\"crayon-line\"><span class=\"crayon-v\">ceph<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-e\">deploy <\/span><span class=\"crayon-e\">mon <\/span><span class=\"crayon-v\">create<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-e\">initial<\/span><\/div>\n<div id=\"crayon-59117ffcec050406578011-2\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-v\">ceph<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-e\">deploy <\/span><span class=\"crayon-e\">admin <\/span><span class=\"crayon-e\">pi1 <\/span><span class=\"crayon-e\">pi2 <\/span><span class=\"crayon-e\">pi3<\/span><\/div>\n<div id=\"crayon-59117ffcec050406578011-3\" class=\"crayon-line\"><span class=\"crayon-st\">for<\/span> <span class=\"crayon-i\">i<\/span> <span class=\"crayon-st\">in<\/span> <span class=\"crayon-e\">pi1 <\/span><span class=\"crayon-e\">pi2 <\/span><span class=\"crayon-v\">pi3<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-st\">do<\/span> <span class=\"crayon-i\">ssh<\/span> <span class=\"crayon-sy\">$<\/span><span class=\"crayon-i\">i<\/span> <span class=\"crayon-i\">chmod<\/span> <span class=\"crayon-cn\">644<\/span> <span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">etc<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ceph<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">ceph<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">client<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">admin<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">keyring<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-v\">done<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>Creating OSDs (Object Storage Daemons)<\/h3>\n<p>Ready to create some storage? I know I am. Insert your USB keys of choice into your Pi USB ports. For the purposes of this guide I will be deploying 1 OSD (USB key) per Pi node. I will also be using the BTRFS filesystem and co-locating the journals on the OSDs with a default journal size of 1GB (assuming 2 * 40MB\/s throughput max and a default filestor max sync interval of 5). This value is hard coded into our ceph-pi config above. The formula is:<\/p>\n<div id=\"crayon-59117ffcec053513381057\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">osd journal size = {2 * (expected throughput * filestore max sync interval)}<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec053513381057-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcec053513381057-1\" class=\"crayon-line\"><span class=\"crayon-e\">osd <\/span><span class=\"crayon-e\">journal <\/span><span class=\"crayon-v\">size<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-sy\">{<\/span><span class=\"crayon-cn\">2<\/span> <span class=\"crayon-o\">*<\/span> <span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">expected <\/span><span class=\"crayon-e \">throughput *<\/span> <span class=\"crayon-e\">filestore <\/span><span class=\"crayon-e\">max <\/span><span class=\"crayon-e\">sync <\/span><span class=\"crayon-v\">interval<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">}<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>So let\u2019s deploy our OSDs. Once our USBs are plugged in, use <span id=\"crayon-59117ffcec056546932031\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-v\">lsblk<\/span><\/span><\/span>\u00a0to display the device locations. To make sure our drives are clean and have a GPT partition table, use the <span id=\"crayon-59117ffcec058183774095\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-v\">gdisk<\/span><\/span><\/span>\u00a0 command for each OSD on each node. Assuming <span id=\"crayon-59117ffcec05b602596654\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">dev<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">sda<\/span><\/span><\/span>\u00a0\u00a0as our OSD:<\/p>\n<p><span id=\"crayon-59117ffcec05e703302555\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-v\">gdisk<\/span> <span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">dev<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">sda<\/span><\/span><\/span><\/p>\n<p>Create a new partition table, write it to disk and exit. Do this for each OSD on each node. You can craft a bash <span id=\"crayon-59117ffcec060781950223\" class=\"crayon-syntax crayon-syntax-inline crayon-theme-classic crayon-theme-classic-inline crayon-font-monaco\"><span class=\"crayon-pre crayon-code\"><span class=\"crayon-st\">for<\/span><\/span><\/span>\u00a0 loop if you are feeling \u201cbashy\u201d or programmatic.<\/p>\n<p>Once all OSD drives have a fresh partition table you can use ceph-deploy to create your OSDs (using BTRFS for this guide) where pi1 is our present node and \/dev\/sda is the OSD we are creating:<\/p>\n<div id=\"crayon-59117ffcec063431203638\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">ceph-deploy osd create&nbsp;&#8211;fs-type btrfs pi1:\/dev\/sda<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec063431203638-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcec063431203638-1\" class=\"crayon-line\"><span class=\"crayon-v\">ceph<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-e\">deploy <\/span><span class=\"crayon-e\">osd <\/span><span class=\"crayon-i\">create<\/span>\u00a0<span class=\"crayon-o\">&#8212;<\/span><span class=\"crayon-v\">fs<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-e\">type <\/span><span class=\"crayon-e\">btrfs <\/span><span class=\"crayon-v\">pi1<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">dev<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-v\">sda<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Repeat this for all OSD drives on all nodes (or write a for loop). Once you\u2019ve created at least 3 you are ready to move on.<\/p>\n<h2>Checking Cluster Health<\/h2>\n<p>Congratulations! You should have a working Ceph-Pi cluster. Trust, but verify. Get the health status of your cluster using this command:<\/p>\n<div id=\"crayon-59117ffcec066299481118\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">ceph -s<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec066299481118-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcec066299481118-1\" class=\"crayon-line\"><span class=\"crayon-v\">ceph<\/span> <span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-v\">s<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>and for a less verbose output<\/p>\n<div id=\"crayon-59117ffcec069865518427\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><textarea class=\"crayon-plain print-no\" readonly=\"readonly\" wrap=\"soft\" data-settings=\"dblclick\">ceph health<\/textarea><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-59117ffcec069865518427-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-59117ffcec069865518427-1\" class=\"crayon-line\"><span class=\"crayon-e\">ceph <\/span><span class=\"crayon-v\">health<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2>What to do now?<\/h2>\n<p>Use your storage cluster! Create an RBD, mount it \u2013 export NFS or CIFS. There is a lot of reading out there. Now you know how to deploy a Ceph cluster on Raspberry Pi.<\/p>\n<h3>References<\/h3>\n<p>http:\/\/millibit.blogspot.com\/2014\/12\/ceph-pi-installing-ceph-on-raspberry-pi.html<\/p>\n<p>http:\/\/ceph.com\/docs\/v0.80.5\/start\/<br \/>\nhttps:\/\/www.raspberrypi.org\/<\/p>\n<\/div>\n<footer class=\"entry-footer\"><\/footer>\n<\/article>\n<section class=\"related-posts\" data-layout=\"2-2-2-2\">\n<article id=\"post-783\" class=\"post-783 post type-post status-publish format-standard has-post-thumbnail hentry category-technology tag-atlanta tag-bluestore tag-btrfs tag-ceph tag-meetup tag-osd tag-performance tag-xfs post-grid\">\n<div class=\"post-content\"><\/div>\n<\/article>\n<\/section>\n<div id=\"comments\" class=\"comments-area\">\n<div class=\"cf\">\n<h2 class=\"comments-title\">14 Comments<\/h2>\n<div class=\"comment-form-actions\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<ol class=\"comment-list\">\n<li id=\"comment-375\" class=\"pingback even thread-even depth-1\">\n<div class=\"comment-body\">Pingback: <a class=\"url\" href=\"http:\/\/www.recantha.co.uk\/blog\/?p=12574\" rel=\"external nofollow\">Distributed file storage with a Ceph cluster on Raspberry Pi | Raspberry Pi Pod<\/a><\/div>\n<\/li>\n<li id=\"comment-383\" class=\"comment odd alt thread-odd thread-alt depth-1 parent\">\n<article id=\"div-comment-383\" class=\"comment-body\">\n<footer class=\"comment-meta\"><span class=\"comment-author vcard\"> Mike Kelly <\/span><span class=\"comment-metadata\"> <a href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/#comment-383\"> <time datetime=\"2015-05-28T11:58:37+00:00\"> 2 years ago <\/time> <\/a> <span class=\"divider\">\/<\/span><span class=\"reply\"><a class=\"comment-reply-link\" href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/?replytocom=383#respond\" rel=\"nofollow\">Reply<\/a><\/span> <\/span><\/footer>\n<div class=\"comment-content\">\n<p>Hi,<\/p>\n<p>This looks like an interesting use of the Raspberry Pi, but I wonder if this is really that cost-effective of a solution?<\/p>\n<p>When I crunched the numbers, it came out to about $1 \/ GB of storage, if you maxed out your nodes with 4 128GB drives and had 3 replicas\u2026 but it seems like, once you need to scale above a TB or so of storage, it\u2019s more cost effective to just build \u201creal\u201d servers using spinning drives at a much higher capacity per node?<\/p>\n<\/div>\n<\/article>\n<ul class=\"children\">\n<li id=\"comment-410\" class=\"comment byuser comment-author-bytedisorder bypostauthor even depth-2\">\n<article id=\"div-comment-410\" class=\"comment-body\">\n<footer class=\"comment-meta\"><span class=\"comment-author vcard\"> <a class=\"url\" href=\"https:\/\/www.bitronictech.net\" rel=\"external nofollow\">Bryan Apperson<\/a> <\/span><span class=\"comment-metadata\"> <a href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/#comment-410\"> <time datetime=\"2015-06-09T20:33:22+00:00\"> 2 years ago <\/time> <\/a> <span class=\"divider\">\/<\/span><span class=\"reply\"><a class=\"comment-reply-link\" href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/?replytocom=410#respond\" rel=\"nofollow\">Reply<\/a><\/span> <\/span><\/footer>\n<div class=\"comment-content\">\n<p>Of course, this is more of a proof-of-concept for learning ceph. Not meant to be cheaper per GB, but cheaper for initial cost. A x86_64 ceph cluster with 10Gbit networking costs 5 figures. This is a 3 figure cost of entry way to begin learning ceph.<\/p>\n<\/div>\n<\/article>\n<\/li>\n<\/ul>\n<\/li>\n<li id=\"comment-401\" class=\"comment odd alt thread-even depth-1 parent\">\n<article id=\"div-comment-401\" class=\"comment-body\">\n<footer class=\"comment-meta\"><span class=\"comment-author vcard\"> <a class=\"url\" href=\"https:\/\/plus.google.com\/+ThomasBludau\/\" rel=\"external nofollow\">Thomas Bludau<\/a> <\/span><span class=\"comment-metadata\"> <a href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/#comment-401\"> <time datetime=\"2015-06-03T18:23:21+00:00\"> 2 years ago <\/time> <\/a> <span class=\"divider\">\/<\/span><span class=\"reply\"><a class=\"comment-reply-link\" href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/?replytocom=401#respond\" rel=\"nofollow\">Reply<\/a><\/span> <\/span><\/footer>\n<div class=\"comment-content\">\n<p>Hey, its working now on my 3 raspberrys 2 too with saltstack implementation and automatical installation script :)!<br \/>\nThanks for this documentation!<br \/>\nOverread that you changed the source.list two times and only for the ceph installation on the first try.<\/p>\n<\/div>\n<\/article>\n<ul class=\"children\">\n<li id=\"comment-409\" class=\"comment byuser comment-author-bytedisorder bypostauthor even depth-2\">\n<article id=\"div-comment-409\" class=\"comment-body\">\n<footer class=\"comment-meta\"><span class=\"comment-author vcard\"> <a class=\"url\" href=\"https:\/\/www.bitronictech.net\" rel=\"external nofollow\">Bryan Apperson<\/a> <\/span><span class=\"comment-metadata\"> <a href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/#comment-409\"> <time datetime=\"2015-06-09T20:31:24+00:00\"> 2 years ago <\/time> <\/a> <span class=\"divider\">\/<\/span><span class=\"reply\"><a class=\"comment-reply-link\" href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/?replytocom=409#respond\" rel=\"nofollow\">Reply<\/a><\/span> <\/span><\/footer>\n<div class=\"comment-content\">\n<p>Yeah, I automated install as well. However I am a fan of making people perform the commands so that they learn rather then:<\/p>\n<p>wget bash.sh<br \/>\nchmod 755 bash.sh<br \/>\nsudo .\/bash.sh<\/p>\n<p>Teaches bad form (and security)!<\/p>\n<p>Thanks for going through the tutorial. Is there a link to your implementation for others to use?<\/p>\n<\/div>\n<\/article>\n<\/li>\n<\/ul>\n<\/li>\n<li id=\"comment-422\" class=\"comment odd alt thread-odd thread-alt depth-1\">\n<article id=\"div-comment-422\" class=\"comment-body\">\n<footer class=\"comment-meta\"><span class=\"comment-author vcard\"> <a class=\"url\" href=\"http:\/\/storagedownunder.com\" rel=\"external nofollow\">Steven Pemberton<\/a> <\/span><span class=\"comment-metadata\"> <a href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/#comment-422\"> <time datetime=\"2015-06-14T22:03:55+00:00\"> 2 years ago <\/time> <\/a> <span class=\"divider\">\/<\/span><span class=\"reply\"><a class=\"comment-reply-link\" href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/?replytocom=422#respond\" rel=\"nofollow\">Reply<\/a><\/span> <\/span><\/footer>\n<div class=\"comment-content\">\n<p>I\u2019ve done something similar with a 6+1 node Pi cluster running Ceph. I\u2019m currently using 24x 8GB USB sticks as storage.<\/p>\n<\/div>\n<\/article>\n<\/li>\n<li id=\"comment-842\" class=\"comment even thread-even depth-1\">\n<article id=\"div-comment-842\" class=\"comment-body\">\n<footer class=\"comment-meta\"><span class=\"comment-author vcard\"> Niels <\/span><span class=\"comment-metadata\"> <a href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/#comment-842\"> <time datetime=\"2015-12-03T19:51:23+00:00\"> 1 year ago <\/time> <\/a> <span class=\"divider\">\/<\/span><span class=\"reply\"><a class=\"comment-reply-link\" href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/?replytocom=842#respond\" rel=\"nofollow\">Reply<\/a><\/span> <\/span><\/footer>\n<div class=\"comment-content\">\n<p>Hi Bryan,<\/p>\n<p>I\u2019m getting stuck at the apt-get install ceph-deploy with the following error:<br \/>\nReading state information\u2026 Done<br \/>\nE: Unable to locate package ceph-deploy<\/p>\n<p>Any thoughts on why this may be? Using Wheezy, also tried Jessie same result.<\/p>\n<p>ceph and ceph-common have been installed.<\/p>\n<p>Thanks,<br \/>\nNiels<\/p>\n<\/div>\n<\/article>\n<\/li>\n<li id=\"comment-843\" class=\"comment odd alt thread-odd thread-alt depth-1\">\n<article id=\"div-comment-843\" class=\"comment-body\">\n<footer class=\"comment-meta\"><span class=\"comment-author vcard\"> <a class=\"url\" href=\"http:\/\/flickerdown.com\" rel=\"external nofollow\">Dave Graham<\/a> <\/span><span class=\"comment-metadata\"> <a href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/#comment-843\"> <time datetime=\"2015-12-04T00:04:27+00:00\"> 1 year ago <\/time> <\/a> <span class=\"divider\">\/<\/span><span class=\"reply\"><a class=\"comment-reply-link\" href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/?replytocom=843#respond\" rel=\"nofollow\">Reply<\/a><\/span> <\/span><\/footer>\n<div class=\"comment-content\">\n<p>just a note: doesn\u2019t work for Debian Jessie. I either have to backport to Wheezy (not optimal) or go through a ton of various hacking and such without using ceph-deploy.<\/p>\n<p>just a heads up. <img decoding=\"async\" class=\"emoji\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/2.2.1\/svg\/1f609.svg\" alt=\"\ud83d\ude09\" \/><\/p>\n<\/div>\n<\/article>\n<\/li>\n<li id=\"comment-846\" class=\"comment even thread-even depth-1 parent\">\n<article id=\"div-comment-846\" class=\"comment-body\">\n<footer class=\"comment-meta\"><span class=\"comment-author vcard\"> <a class=\"url\" href=\"http:\/\/Sorry,don%27thaveone,usetwitter@nielsehs\" rel=\"external nofollow\">Niels Sommer<\/a> <\/span><span class=\"comment-metadata\"> <a href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/#comment-846\"> <time datetime=\"2015-12-05T19:22:02+00:00\"> 1 year ago <\/time> <\/a> <span class=\"divider\">\/<\/span><span class=\"reply\"><a class=\"comment-reply-link\" href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/?replytocom=846#respond\" rel=\"nofollow\">Reply<\/a><\/span> <\/span><\/footer>\n<div class=\"comment-content\">\n<p>Hi Bryan,<\/p>\n<p>Great article on Ceph installation. I have one problem, at the step of installing ceph-deploy. It is not found in the package, I have tried different revisions of ceph and the package is just not found. The ceph and ceph-common packages are installed fine. What might I be doing wrong?<\/p>\n<p>Thanks for this intro to a cost effective ceph cluster <img decoding=\"async\" class=\"emoji\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/2.2.1\/svg\/1f642.svg\" alt=\"\ud83d\ude42\" \/><\/p>\n<p>Cheers,<\/p>\n<p>Niels<\/p>\n<\/div>\n<\/article>\n<ul class=\"children\">\n<li id=\"comment-866\" class=\"comment byuser comment-author-bytedisorder bypostauthor odd alt depth-2\">\n<article id=\"div-comment-866\" class=\"comment-body\">\n<footer class=\"comment-meta\"><span class=\"comment-author vcard\"> <a class=\"url\" href=\"https:\/\/www.bitronictech.net\" rel=\"external nofollow\">Bryan Apperson<\/a> <\/span><span class=\"comment-metadata\"> <a href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/#comment-866\"> <time datetime=\"2015-12-13T13:06:28+00:00\"> 1 year ago <\/time> <\/a> <span class=\"divider\">\/<\/span><span class=\"reply\"><a class=\"comment-reply-link\" href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/?replytocom=866#respond\" rel=\"nofollow\">Reply<\/a><\/span> <\/span><\/footer>\n<div class=\"comment-content\">\n<p>It may not be in the repository any longer. Have you looked in the ceph repos? You may be able to pull it down individually.<\/p>\n<\/div>\n<\/article>\n<\/li>\n<\/ul>\n<\/li>\n<li id=\"comment-3109\" class=\"comment even thread-odd thread-alt depth-1 parent\">\n<article id=\"div-comment-3109\" class=\"comment-body\">\n<footer class=\"comment-meta\"><span class=\"comment-author vcard\"> Mayur <\/span><span class=\"comment-metadata\"> <a href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/#comment-3109\"> <time datetime=\"2016-05-26T05:08:28+00:00\"> 12 months ago <\/time> <\/a> <span class=\"divider\">\/<\/span><span class=\"reply\"><a class=\"comment-reply-link\" href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/?replytocom=3109#respond\" rel=\"nofollow\">Reply<\/a><\/span> <\/span><\/footer>\n<div class=\"comment-content\">\n<p>Hi Bryan,<br \/>\nVery usefull article Thanks for posting, I wanted to implement a storage server within area, where client side is windows OS, so is it possible to implement this project.<\/p>\n<\/div>\n<\/article>\n<ul class=\"children\">\n<li id=\"comment-3408\" class=\"comment byuser comment-author-bytedisorder bypostauthor odd alt depth-2\">\n<article id=\"div-comment-3408\" class=\"comment-body\">\n<footer class=\"comment-meta\"><span class=\"comment-author vcard\"> <a class=\"url\" href=\"https:\/\/www.bitronictech.net\" rel=\"external nofollow\">Bryan Apperson<\/a> <\/span><span class=\"comment-metadata\"> <a href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/#comment-3408\"> <time datetime=\"2016-07-19T10:35:44+00:00\"> 10 months ago <\/time> <\/a> <span class=\"divider\">\/<\/span><span class=\"reply\"><a class=\"comment-reply-link\" href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/?replytocom=3408#respond\" rel=\"nofollow\">Reply<\/a><\/span> <\/span><\/footer>\n<div class=\"comment-content\">\n<p>Yes, you\u2019ll probably want to use CIFS or NFS to export an RBD image.<\/p>\n<\/div>\n<\/article>\n<\/li>\n<\/ul>\n<\/li>\n<li id=\"comment-3465\" class=\"comment even thread-even depth-1\">\n<article id=\"div-comment-3465\" class=\"comment-body\">\n<footer class=\"comment-meta\"><span class=\"comment-author vcard\"> Marian <\/span><span class=\"comment-metadata\"> <a href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/#comment-3465\"> <time datetime=\"2016-09-08T11:59:26+00:00\"> 8 months ago <\/time> <\/a> <span class=\"divider\">\/<\/span><span class=\"reply\"><a class=\"comment-reply-link\" href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/?replytocom=3465#respond\" rel=\"nofollow\">Reply<\/a><\/span> <\/span><\/footer>\n<div class=\"comment-content\">\n<p>Thanks a lot for this nice tutorial. Quick question: my deployment fails when I do:<br \/>\nceph-deploy mon create-initial<\/p>\n<p>It connects to the remote host, runs a bunch of stuff, then comes up with this error:<br \/>\nFailed to execute command: sudo systemctl enable ceph.target<\/p>\n<p>I\u2019m stuck; don\u2019t know what to do next. If I run that command manually, I get the same message.<br \/>\nFailed to execute operation: No such file or directory<\/p>\n<\/div>\n<\/article>\n<\/li>\n<li id=\"comment-3520\" class=\"comment odd alt thread-odd thread-alt depth-1\">\n<article id=\"div-comment-3520\" class=\"comment-body\">\n<footer class=\"comment-meta\"><span class=\"comment-author vcard\"> Marian <\/span><span class=\"comment-metadata\"> <a href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/#comment-3520\"> <time datetime=\"2016-09-21T12:55:28+00:00\"> 8 months ago <\/time> <\/a> <span class=\"divider\">\/<\/span><span class=\"reply\"><a class=\"comment-reply-link\" href=\"http:\/\/bryanapperson.com\/blog\/the-definitive-guide-ceph-cluster-on-raspberry-pi\/?replytocom=3520#respond\" rel=\"nofollow\">Reply<\/a><\/span> <\/span><\/footer>\n<div class=\"comment-content\">\n<p>HI Bryan,<\/p>\n<p class=\"comment-subscription-form\">Do you have any experience with the Ubuntu Mate on arm processor? I have the new Odroid which is much better (hardware-wise) than Rpi and I have trouble getting stuff to work. It installs CEPH just fine from repositories, but then.. I\u2019m stuck <img decoding=\"async\" class=\"emoji\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/2.2.1\/svg\/1f642.svg\" alt=\"\ud83d\ude42\" \/><br \/>\nAny advice<\/p>\n<\/div>\n<\/article>\n<\/li>\n<\/ol>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p class=\"excerpt\">Building a Ceph Cluster on Raspberry Pi &#8211; Bryan Apperson As the author clearly stated in a comment, this is more of a proof-of-concept for learning ceph, not for a real deploy as it&#8217;s not meant to be cheaper per GB, but cheaper for initial cost: a &#8220;3 figure cost of entry way to begin&hellip;<\/p>\n<p class=\"more-link-p\"><a class=\"more-link\" href=\"https:\/\/monodes.com\/predaelli\/2017\/05\/09\/building-a-ceph-cluster-on-raspberry-pi\/\">Read more &rarr;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"link","meta":{"inline_featured_image":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[72,80],"tags":[156,155],"class_list":["post-2443","post","type-post","status-publish","format-link","hentry","category-documentations","category-hardware","tag-ceph","tag-raspberry","post_format-post-format-link"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p6daft-Dp","jetpack-related-posts":[{"id":9438,"url":"https:\/\/monodes.com\/predaelli\/2022\/06\/07\/jeff-geerlings-petabyte-pi-raspberry-pi\/","url_meta":{"origin":2443,"position":0},"title":"Jeff Geerling&#8217;s Petabyte Pi &#8211; Raspberry Pi","author":"Paolo Redaelli","date":"2022-06-07","format":false,"excerpt":"Jeff Geerling set up 60 hard drives - 1.2 petabytes altogether - as a RAID 0 array, all driven by one Raspberry Pi Compute Module 4 (CM4). Source: Jeff Geerling's Petabyte Pi - Raspberry Pi","rel":"","context":"In &quot;Senza categoria&quot;","block_context":{"text":"Senza categoria","link":"https:\/\/monodes.com\/predaelli\/category\/senza-categoria\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":9193,"url":"https:\/\/monodes.com\/predaelli\/2022\/03\/29\/install-yacy-search-on-raspberry-pi\/","url_meta":{"origin":2443,"position":1},"title":"Install yacy-search on Raspberry Pi","author":"Paolo Redaelli","date":"2022-03-29","format":false,"excerpt":"I do admit that I am tempted to do this. I just fear it will be just too much for my Raspberry 3. Get the latest version of yacy-search for on Raspberry Pi - YaCy peer-to-peer search engine and intranet search appliance Source: Install yacy-search on Raspberry Pi using the\u2026","rel":"","context":"In &quot;Mood&quot;","block_context":{"text":"Mood","link":"https:\/\/monodes.com\/predaelli\/category\/mood\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":12821,"url":"https:\/\/monodes.com\/predaelli\/2025\/02\/21\/7-reasons-you-should-turn-your-raspberry-pi-into-a-dns-server\/","url_meta":{"origin":2443,"position":2},"title":"7 reasons you should turn your Raspberry Pi into a DNS server","author":"Paolo Redaelli","date":"2025-02-21","format":"link","excerpt":"If you aren't using your Raspberry Pi as a DNS server for your home network, there are plenty of reasons why you should Source: 7 reasons you should turn your Raspberry Pi into a DNS server","rel":"","context":"In &quot;Senza categoria&quot;","block_context":{"text":"Senza categoria","link":"https:\/\/monodes.com\/predaelli\/category\/senza-categoria\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":5115,"url":"https:\/\/monodes.com\/predaelli\/2019\/01\/08\/raspberry-pi-becomes-a-member-of-the-risc-v-foundation\/","url_meta":{"origin":2443,"position":3},"title":"Raspberry Pi Becomes a Member of the RISC-V Foundation","author":"Paolo Redaelli","date":"2019-01-08","format":false,"excerpt":"https:\/\/blog.hackster.io\/raspberry-pi-becomes-a-member-of-the-risc-v-foundation-11f06aecc241?fbclid=IwAR02zsBHEyknETTlDPyoiJe_KY8jdRIV8DpdHvI86ieQiI_wtcig4LhEAME I can't wait for it!","rel":"","context":"In &quot;Senza categoria&quot;","block_context":{"text":"Senza categoria","link":"https:\/\/monodes.com\/predaelli\/category\/senza-categoria\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":11577,"url":"https:\/\/monodes.com\/predaelli\/2024\/04\/07\/the-ultimate-raspberry-pi-5-nas-youtube\/","url_meta":{"origin":2443,"position":4},"title":"The ULTIMATE Raspberry Pi 5 NAS &#8211; YouTube","author":"Paolo Redaelli","date":"2024-04-07","format":"video","excerpt":"","rel":"","context":"In &quot;Hardware&quot;","block_context":{"text":"Hardware","link":"https:\/\/monodes.com\/predaelli\/category\/hardware\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":8411,"url":"https:\/\/monodes.com\/predaelli\/2021\/05\/06\/raspberry-ethernet-on-wifi-off\/","url_meta":{"origin":2443,"position":5},"title":"Raspberry Ethernet On WiFi Off","author":"Paolo Redaelli","date":"2021-05-06","format":false,"excerpt":"From Top 10 common issues while using raspberry-pi Ethernet On WiFi Off By default, when an Ethernet cable is connected to the Raspberry Pi, the Wi-Fi connectivity is disabled. This was implemented probably as a security feature for the Pi to disable routing between the Wi-Fi and the Ethernet port.\u2026","rel":"","context":"In &quot;Hardware&quot;","block_context":{"text":"Hardware","link":"https:\/\/monodes.com\/predaelli\/category\/hardware\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/posts\/2443","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/comments?post=2443"}],"version-history":[{"count":0,"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/posts\/2443\/revisions"}],"wp:attachment":[{"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/media?parent=2443"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/categories?post=2443"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/tags?post=2443"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}