Giter VIP home page Giter VIP logo

vdo-devel's Introduction

vdo-devel

Primary development repository for the dm-vdo kernel module and related userspace tools, plus documentation, tests and packaging support for dm-vdo.

Background

VDO is a device-mapper target that provides inline block-level deduplication, compression, and thin provisioning capabilities for primary storage. VDO is managed through LVM and can be integrated into any existing storage stack.

Deduplication is a technique for reducing the consumption of storage resources by eliminating multiple copies of duplicate blocks. Compression takes the individual unique blocks and shrinks them with coding algorithms; these reduced blocks are then efficiently packed together into physical blocks. Thin provisioning manages the mapping from logical block addresses presented by VDO to where the data has actually been stored, and also eliminates any blocks of all zeroes.

With deduplication, instead of writing the same data more than once each duplicate block is detected and recorded as a reference to the original block. VDO maintains a mapping from logical block addresses (presented to the storage layer above VDO) to physical block addresses on the storage layer under VDO. After deduplication, multiple logical block addresses may be mapped to the same physical block address; these are called shared blocks and are reference-counted by the software.

With VDO's compression, blocks are compressed with the fast LZ4 algorithm, and collected together where possible so that multiple compressed blocks fit within a single 4 KB block on the underlying storage. Each logical block address is mapped to a physical block address and an index within it for the desired compressed data. All compressed blocks are individually reference-counted for correctness.

Block sharing and block compression are invisible to applications using the storage, which read and write blocks as they would if VDO were not present. When a shared block is overwritten, a new physical block is allocated for storing the new block data to ensure that other logical block addresses that are mapped to the shared physical block are not modified.

History

VDO was originally developed by Permabit Technology Corp. as a proprietary set of kernel modules and userspace tools. This software and technology has been acquired by Red Hat and relicensed under the GPL (v2 or later). The kernel module has been merged into the upstream Linux kernel as the dm-vdo device mapper target. The source for this module can be found in drivers/md/dm-vdo/.

Documentation

Documentation can be found in the doc directory. Additional documentation can be found here:

Releases

This repository is the upstream source for the dm-vdo kernel module. The most recent updates enter the mainline Linux kernel through the device-mapper tree.

Userspace tools for managing dm-vdo device-mapper targets are published periodically through the vdo repository.

Building

In order to build the entire project, invoke the following command from the src directory of this tree:

    make all archive

Source tarballs and installable RPMs will appear in the archive directory.

Patched sources that work with some older kernels can be found here.

Communication Channels and Contributions

Community feedback, participation and patches are welcome. Code contributions can be filed as pull requests and will be accepted based on review feedback and testing results. Patches can also be submitted to [email protected] using the normal kernel patch submission process.

Questions and suggestions can be filed as issues. We try to address issues and pull requests in a timely manner, but a response may sometimes take a few days. Your patience is appreciated.

Licensing

GPL v2.0 or later. All contributions retain ownership by their original author, but must also be licensed under the GPL 2.0 or later to be merged.

vdo-devel's People

Contributors

lorelei-sakai avatar bjohnsto avatar slegendr avatar raeburn avatar c2redhat avatar rhawalsh avatar harshimogalapalli avatar masahir0y avatar masatake avatar

Stargazers

Darío Clavijo avatar ellis avatar  avatar  avatar Tigerblue77 avatar

Watchers

Sweet Tea Dorminy avatar Tao Xu avatar  avatar  avatar  avatar  avatar

vdo-devel's Issues

Unable to mount volume & input/output errors after lvextend VDO volume

Hello there,
I think I've made a big mistake which I'd like to fix it as best I can and I hope I won't lose my data...

On a Debian 11 bare-metal, I did a lvextend of a VDO pool in parallel with a lvextend of the LV it contains and now my volume :

  • won't mount anymore
mount /dev/Ultron-vg/ZEROED-VDO-LV-1 /mnt/ZEROED-VDO-LV-1/
mount: /mnt/ZEROED-VDO-LV-1: unable to read superblock at address /dev/mapper/Ultron--vg-ZEROED--VDO--LV--1.
  • I can't even repair it with e2fsck (I/O errors) :
e2fsck /dev/Ultron-vg/ZEROED-VDO-LV-1
e2fsck 1.46.2 (28-Feb-2021)
/dev/Ultron-vg/ZEROED-VDO-LV-1: recovering journal
Superblock needs_recovery flag is clear, but journal has data.
Run journal anyway<y>? yes
e2fsck: Input/output error while recovering journal of /dev/Ultron-vg/ZEROED-VDO-LV-1
e2fsck: unable to set superblock flags on /dev/Ultron-vg/ZEROED-VDO-LV-1

/dev/Ultron-vg/ZEROED-VDO-LV-1: ********** WARNING: Filesystem still has errors **********
  • when I lvextend again, I get the following output:
lvextend --resizefs -L20.4T /dev/Ultron-vg/ZEROED-VDO-POOL-1
  Ignoring --resizefs as volume Ultron-vg/ZEROED-VDO-POOL-1 does not have a filesystem.
  Rounding size to boundary between physical extents: 20,40 TiB.
  Increasing incremention size from 0    to 8,00 GiB to fit new VDO slab.
  Size of logical volume Ultron-vg/ZEROED-VDO-POOL-1_vdata changed from 20,40 TiB (5347738 extents) to <20,41 TiB (5349786 extents).
  device-mapper: reload ioctl on  (254:4) failed: Input/output error
  Failed to suspend logical volume Ultron-vg/ZEROED-VDO-LV-1.

I think the problem comes from VDOdataPool but I don't even know how to interact with it...
The underlying storage is OK and every other LV in this PV and VG are okay, healthy and working well.

vdostats --human-readable

gives me the following output :

Device                                                       Size      Used Available Use% Space saving%
Ultron--vg-ZEROED--VDO--POOL--1-vpool                       20.4T     17.0G     20.4T   0%          100%
Ultron--vg-COMPRESSED--DEDUPLICATED--VDO--POOL--1-vpool      1.0T    917.6G    106.4G  90%           14%

But I should have 20.2T used, not 17.0G 😭

Please tell me I won't lose my data 😭
Yes it's my choice not to backup it and it's "only" movies and STORJ data but I would be very happy if I could recover it (or copy it elsewhere before destroying this VDO volume)

Timed out waiting for VDO device

Hello,
I run a Debian 11(.6) bare-metal with 2 LVM VDO volumes. Everything was working fine but now my operating system fails booting because it reaches a timeout waiting for one of the VDO volumes (not the biggest by the way). So it goes in emergency mode, I type the root password then run mount -a && exit and it mounts the volume like a charm then starts without any problem. I didn't do any big change on this side so I don't know what could be wrong neither how to investigate.

Here are my boot logs from journalctl, I just cutted start and end, nothing in the middle. I just separated the error to make it clearer :

[...]
mars 18 19:12:54 Ultron systemd[1]: Found device /dev/mapper/Ultron--vg-swap_1.
mars 18 19:12:54 Ultron systemd-udevd[492]: Using default interface naming scheme 'v247'.
mars 18 19:12:54 Ultron systemd-udevd[492]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.
mars 18 19:12:54 Ultron systemd[1]: Activating swap /dev/mapper/Ultron--vg-swap_1...
mars 18 19:12:54 Ultron kernel: Adding 999420k swap on /dev/mapper/Ultron--vg-swap_1.  Priority:-2 extents:1 across:999420k FS
mars 18 19:12:54 Ultron systemd[1]: Activated swap /dev/mapper/Ultron--vg-swap_1.
mars 18 19:12:54 Ultron systemd[1]: Reached target Swap.
mars 18 19:12:57 Ultron systemd[1]: Finished Wait for udev To Complete Device Initialization.
mars 18 19:12:57 Ultron systemd[1]: Starting LVM direct activation of logical volumes...
mars 18 19:12:57 Ultron kernel: kvdo: loading out-of-tree module taints kernel.
mars 18 19:12:57 Ultron kernel: kvdo: module verification failed: signature and/or required key missing - tainting kernel
mars 18 19:12:57 Ultron kernel: kvdo: modprobe: loaded version 8.2.1.3
mars 18 19:12:57 Ultron kernel: kvdo0:lvm: Detected version mismatch between kernel module and tools kernel: 4, tool: 2
mars 18 19:12:57 Ultron kernel: kvdo0:lvm: Please consider upgrading management tools to match kernel.
mars 18 19:12:57 Ultron kernel: kvdo0:lvm: loading device '254:3'
mars 18 19:12:57 Ultron kernel: kvdo0:lvm: zones: 6 logical, 1 physical, 6 hash; total threads: 42
mars 18 19:13:00 Ultron kernel: kvdo0:lvm: starting device '254:3'
mars 18 19:14:17 Ultron kernel: kvdo0:journalQ: Setting UDS index target state to online
mars 18 19:14:17 Ultron kernel: kvdo0:dedupeQ: loading or rebuilding index: /dev/dm-2
mars 18 19:14:17 Ultron kernel: kvdo0:dedupeQ: Using 12 indexing zones for concurrency.
mars 18 19:14:17 Ultron kernel: kvdo0:lvm: device '254:3' started
mars 18 19:14:17 Ultron kernel: kvdo0:lvm: resuming device '254:3'
mars 18 19:14:17 Ultron kernel: kvdo0:lvm: device '254:3' resumed
mars 18 19:14:17 Ultron kernel: kvdo0:lvm: Setting UDS index target state to offline
mars 18 19:14:17 Ultron systemd[1]: Started Device-mapper event daemon.
mars 18 19:14:17 Ultron dmeventd[764]: dmeventd ready for processing.
mars 18 19:14:17 Ultron lvm[764]: Monitoring VDO pool Ultron--vg-ZEROED--VDO--POOL--1-vpool.
mars 18 19:14:17 Ultron kernel: kvdo1:lvm: Detected version mismatch between kernel module and tools kernel: 4, tool: 2
mars 18 19:14:17 Ultron kernel: kvdo1:lvm: Please consider upgrading management tools to match kernel.
mars 18 19:14:17 Ultron kernel: kvdo1:lvm: loading device '254:6'
mars 18 19:14:17 Ultron systemd[1]: Found device /dev/Ultron-vg/ZEROED-VDO-LV-1.
mars 18 19:14:17 Ultron kernel: kvdo1:lvm: zones: 6 logical, 1 physical, 6 hash; total threads: 42
mars 18 19:14:18 Ultron kernel: kvdo0:physQ0: VDO commencing normal operation
mars 18 19:14:18 Ultron kernel: kvdo0:dedupeQ: loaded index from chapter 0 through chapter 15
mars 18 19:14:21 Ultron kernel: kvdo1:lvm: starting device '254:6'
mars 18 19:14:22 Ultron systemd[1]: dev-Ultron\x2dvg-COMPRESSED\x2dDEDUPLICATED\x2dVDO\x2dLV\x2d1.device: Job dev-Ultron\x2dvg-COMPRESSED\x2dDEDUPLICATED\x2dVDO\x2dLV\x2d1.device/start timed out.
mars 18 19:14:22 Ultron systemd[1]: Timed out waiting for device /dev/Ultron-vg/COMPRESSED-DEDUPLICATED-VDO-LV-1.
mars 18 19:14:22 Ultron systemd[1]: Dependency failed for /mnt/COMPRESSED-DEDUPLICATED-VDO-LV-1.
mars 18 19:14:22 Ultron systemd[1]: Dependency failed for Local File Systems.
mars 18 19:14:22 Ultron systemd[1]: local-fs.target: Job local-fs.target/start failed with result 'dependency'.
mars 18 19:14:22 Ultron systemd[1]: local-fs.target: Triggering OnFailure= dependencies.
mars 18 19:14:22 Ultron systemd[1]: Dependency failed for /tmp.
mars 18 19:14:22 Ultron systemd[1]: Dependency failed for Network Time Synchronization.
mars 18 19:14:22 Ultron systemd[1]: systemd-timesyncd.service: Job systemd-timesyncd.service/start failed with result 'dependency'.
mars 18 19:14:22 Ultron systemd[1]: tmp.mount: Job tmp.mount/start failed with result 'dependency'.
mars 18 19:14:22 Ultron systemd[1]: Dependency failed for /var.
mars 18 19:14:22 Ultron systemd[1]: Dependency failed for Platform Persistent Storage Archival.
mars 18 19:14:22 Ultron systemd[1]: systemd-pstore.service: Job systemd-pstore.service/start failed with result 'dependency'.
mars 18 19:14:22 Ultron systemd[1]: Dependency failed for Load AppArmor profiles.
mars 18 19:14:22 Ultron systemd[1]: apparmor.service: Job apparmor.service/start failed with result 'dependency'.
mars 18 19:14:22 Ultron systemd[1]: Dependency failed for Flush Journal to Persistent Storage.
mars 18 19:14:22 Ultron systemd[1]: systemd-journal-flush.service: Job systemd-journal-flush.service/start failed with result 'dependency'.
mars 18 19:14:22 Ultron systemd[1]: Dependency failed for Load/Save Random Seed.
mars 18 19:14:22 Ultron systemd[1]: systemd-random-seed.service: Job systemd-random-seed.service/start failed with result 'dependency'.
mars 18 19:14:22 Ultron systemd[1]: Dependency failed for Update UTMP about System Boot/Shutdown.
mars 18 19:14:22 Ultron systemd[1]: Dependency failed for Update UTMP about System Runlevel Changes.
mars 18 19:14:22 Ultron systemd[1]: systemd-update-utmp-runlevel.service: Job systemd-update-utmp-runlevel.service/start failed with result 'dependency'.
mars 18 19:14:22 Ultron systemd[1]: systemd-update-utmp.service: Job systemd-update-utmp.service/start failed with result 'dependency'.
mars 18 19:14:22 Ultron systemd[1]: var.mount: Job var.mount/start failed with result 'dependency'.
mars 18 19:14:22 Ultron systemd[1]: mnt-COMPRESSED\x2dDEDUPLICATED\x2dVDO\x2dLV\x2d1.mount: Job mnt-COMPRESSED\x2dDEDUPLICATED\x2dVDO\x2dLV\x2d1.mount/start failed with result 'dependency'.
mars 18 19:14:22 Ultron systemd[1]: dev-Ultron\x2dvg-COMPRESSED\x2dDEDUPLICATED\x2dVDO\x2dLV\x2d1.device: Job dev-Ultron\x2dvg-COMPRESSED\x2dDEDUPLICATED\x2dVDO\x2dLV\x2d1.device/start failed with result 'timeout'.
[...]

And here is my fstab file :

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# systemd generates mount units based on this file, see systemd.mount(5).
# Please run 'systemctl daemon-reload' after making changes here.
#
# <file system>                                 <mount point>                           <type>  <options>                                 <dump>   <pass>
/dev/mapper/Ultron--vg-root                     /                                       ext4    errors=remount-ro                         01
# /boot was on /dev/sdb2 during installation
UUID=aafc24cb-e044-48e1-b399-be893c411fc4       /boot                                   ext2    defaults                                  02
# /boot/efi was on /dev/sdb1 during installation
UUID=CE05-25BD                                  /boot/efi                               vfat    umask=0077                                01
/dev/mapper/Ultron--vg-swap_1                   none                                    swap    sw                                        00
#/dev/Ultron-vg/ZEROED-VDO-LV-1                 /mnt/ZEROED-VDO-LV-1                    ext4    rw,suid,dev,exec,auto,nouser,sync,discard 00
/dev/Ultron-vg/ZEROED-VDO-LV-1 /mnt/ZEROED-VDO-LV-1 ext4 rw,suid,dev,exec,auto,nouser,sync 0 0
#/dev/Ultron-vg/COMPRESSED-DEDUPLICATED-VDO-LV-1        /mnt/COMPRESSED-DEDUPLICATED-VDO-LV-1   ext4    rw,suid,dev,exec,auto,nouser,sync,discard                                          0       0
/dev/Ultron-vg/COMPRESSED-DEDUPLICATED-VDO-LV-1 /mnt/COMPRESSED-DEDUPLICATED-VDO-LV-1 ext4 rw,suid,dev,exec,auto,nouser,sync 0 0
/mnt/COMPRESSED-DEDUPLICATED-VDO-LV-1/home      /home                                   none    x-systemd.requires=/mnt/COMPRESSED-DEDUPLICATED-VDO-LV-1,x-systemd.automount,bind  0       0
/mnt/COMPRESSED-DEDUPLICATED-VDO-LV-1/tmp       /tmp                                    none    x-systemd.requires=/mnt/COMPRESSED-DEDUPLICATED-VDO-LV-1,x-systemd.automount,bind  0       0
/mnt/COMPRESSED-DEDUPLICATED-VDO-LV-1/var       /var                                    none    x-systemd.requires=/mnt/COMPRESSED-DEDUPLICATED-VDO-LV-1,x-systemd.automount,bind  0       0

Failed to install VDO on Fedora 39 with python(abi) failed dependency

Failed to install vdo on Fedora 39 because python dependency.

Error:
Problem: conflicting requests

nothing provides python(abi) = 3.11 needed by vdo-6.2.7.17-3.fc38.x86_64 from copr:copr.fedorainfracloud.org:rhawalsh:dm-vdo
(try to add '--skip-broken' to skip uninstallable packages)

Recommend Projects

  • React photo React

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

  • Vue.js photo Vue.js

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

  • Typescript photo Typescript

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

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

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

Recommend Topics

  • javascript

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

  • web

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

  • server

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

  • Machine learning

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

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

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

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.