Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
7 changes: 6 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,6 @@
*.swp
_site
.sass-cache
.jekyll-cache
.jekyll-metadata
vendor
Gemfile.lock
41 changes: 25 additions & 16 deletions 404.html
Original file line number Diff line number Diff line change
@@ -1,16 +1,25 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Page not found</title>
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div>
<h1>404</h1>
<p><strong>File not found</strong></p>
<ul>
<li><a href="https://storaged.org/">Main page</a></li>
<li><a href="https://storaged.org/doc/udisks2-api/latest">Udisks API documentation</a></li>
</ul>
</body>
</html>
---
permalink: /404.html
layout: page
---

<style type="text/css" media="screen">
.container {
margin: 10px auto;
max-width: 600px;
text-align: center;
}
h1 {
margin: 30px 0;
font-size: 4em;
line-height: 1;
letter-spacing: -1px;
}
</style>

<div class="container">
<h1>404</h1>

<p><strong>Page not found :(</strong></p>
<p>The requested page could not be found.</p>
</div>
33 changes: 33 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
source "https://rubygems.org"
# Hello! This is where you manage which Jekyll version is used to run.
# When you want to use a different version, change it below, save the
# file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
#
# bundle exec jekyll serve
#
# This will help ensure the proper Jekyll version is running.
# Happy Jekylling!
# gem "jekyll", "~> 4.4.1"
# This is the default theme for new Jekyll sites. You may change this to anything you like.
gem "minima", "~> 2.5"
# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
# uncomment the line below. To upgrade, run `bundle update github-pages`.
gem "github-pages", "~> 232", group: :jekyll_plugins
# If you have any plugins, put them here!
group :jekyll_plugins do
gem "jekyll-feed", "~> 0.12"
end

# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
# and associated library.
platforms :mingw, :x64_mingw, :mswin, :jruby do
gem "tzinfo", ">= 1", "< 3"
gem "tzinfo-data"
end

# Performance-booster for watching directories on Windows
gem "wdm", "~> 0.1", :platforms => [:mingw, :x64_mingw, :mswin]

# Lock `http_parser.rb` gem to `v0.6.x` on JRuby builds since newer versions of the gem
# do not have a Java counterpart.
gem "http_parser.rb", "~> 0.6.0", :platforms => [:jruby]
3 changes: 0 additions & 3 deletions README.md

This file was deleted.

26 changes: 26 additions & 0 deletions _config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
title: Storaged Project
description: >-
Storaged project is a collection of storage management tools, libraries and APIs
used for creating, managing and monitoring storage across the GNU/Linux ecosystem.

theme: minima
plugins:
- jekyll-feed

show_excerpts: true

github_username: storaged-project
rss: rss

header_pages:
- blivet/blivet.md
- blivet-gui/blivet-gui.md
- libblockdev/libblockdev.md
- libbytesize/libbytesize.md
- udisks/udisks.md

markdown: kramdown

include:
- _static
- _*.html
77 changes: 77 additions & 0 deletions _posts/2023-10-05-Partitioning-with-Ansible-Storage-Role-VDO.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
---
layout: post
title: "Partitioning with Ansible Storage Role: VDO"
date: 2023-10-05 13:17:00 +0100
categories: storage-role
author: Jan Pokorny
---

This time we shall talk about Storage Role support of VDO. The abbreviation stands for Virtual Data Optimizer and that is exactly what it does. It reduces stored data size to save space. To be precise Storage Role utilizes LVM version of VDO called (what a surprise) [LVM VDO](https://man7.org/linux/man-pages/man7/lvmvdo.7.html).

### How Does VDO Do It

There are two main options VDO uses to reduce the data size:

- Data compression
- Data deduplication

Data compression works just like regular file compression. However VDO packs and unpacks blocks of data automatically and on lower level, so user does not even know about it happening.

The same goes for data deduplication. VDO identifies and removes duplicit blocks of data. Redundant blocks are removed and the last remaining copy of the block gets to do all their work.

During the VDO device creation compression and deduplication can be turned on or off.

### Using VDO in Storage Role

We should be already pretty confident about how to use the Storage Role and using VDO is not much different.

To use it the `storage_pool` has to be created. Then set `true` to one or both of the options `compression` and `deduplication` on one of the volumes. This will tell the role to use VDO. **Please note that currently the Storage Role supports only one VDO volume per `storage_pool`**.

You also want to set both the `vdo_pool_size` and `size` options.

Why two sizes?
The first size represented by `vdo_pool_size` option is actual physical space reserved for the compressed data.

The other option - `size` - tells the device how should it present itself on the outside. This value is virtual and can (and it is supposed to) be larger than reserved physical space. By how much is left to users discretion and should be based on estimation of data compressibility.

The playbook for VDO creation then should look like this:

---
- hosts: all
become: true
vars:
storage_safe_mode: false

tasks:
- name: Create LVM VDO volume under volume group 'vg1'
include_role:
name: linux-system-roles.storage
vars:
storage_pools:
- name: vg1
disks:
- "dev/sda"
- "dev/sdb"
- "dev/sdc"
volumes:
- name: test1
compression: true
deduplication: true
vdo_pool_size: "9 GiB" # space taken on disk
size: "12 GiB" # virtual space
mount_point: "/opt/test1"
state: present

### Things to Know Before Creating a VDO Device

As goes for all more advanced features that Storage Role provides, VDO is meant for specific use cases.

Some data such as logs are much easier to compress or deduplicate. This makes them much better candidates. On the other hand, using VDO with data that are often modified or already scrambled by encryption can result in just an additional strain on resources.

Data that cannot be easily deduplicated or compressed can also cause a situation when user runs out of physical storage space with VDO showing lots of free space left.

Since the system has no way of telling what kind of data are eventually going to be put on which device, the responsibility of choosing wisely falls upon the user.

### Couple of Tips at the End

And that's it. As I already mentioned, Storage Role VDO uses LVM VDO so its [manpages](https://man7.org/linux/man-pages/man7/lvmvdo.7.html) are a good point to start if you want to know more about it. And for more general information about VDO you can also check [VDO project on Github](https://github.com/dm-vdo/vdo).
9 changes: 9 additions & 0 deletions blivet-gui/blivet-gui.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
layout: page
title: "blivet-gui"
permalink: /blivet-gui/
---

[Source code](https://github.com/storaged-project/blivet-gui) | [Developer Guide](https://github.com/storaged-project/blivet-gui/blob/main/CONTRIBUTING.md)

Blivet-gui is a graphical tool for storage management that uses Blivet library. It provides an easy way to create, modify or delete various storage devices. Currently available features includes LVM storage management (including support for LVM cache, LVM RAID or Thin LVM), Btrfs (including support for Btrfs RAID, subvolumes and snapshots), MD RAID, encrypted devices using LUKS and of course support for managing standard disk partitions and filesystems.
15 changes: 15 additions & 0 deletions blivet/blivet.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
layout: page
title: "blivet"
permalink: /blivet/
---

[Source code](https://github.com/storaged-project/blivet) | [API Documentation](/blivet/docs) | [Developer Guide](https://github.com/storaged-project/blivet/blob/main/CONTRIBUTING.md)

Blivet is a free, open-source python module for configuring storage on Linux. It was originally written as the storage backend for Anaconda — the OS installer used by Fedora and Red Hat Enterprise Linux, among others.

The main thing that makes Blivet stand apart from other storage configuration tools is the ability to model an arbitrarily large set of changes in memory without changing anything on disk. This makes it possible to specify your full configuration before ever changing anything on disk instead of applying changes as you define each layer.

Another powerful feature of Blivet is its DeviceFactory class hierarchy, which allows creation of full device stacks with a single method call using a top-down specification.

Blivet also features a powerful partitioning engine that can allocate new partitions based on flexible specifications.
Loading