{"id":2555,"date":"2015-12-01T19:32:00","date_gmt":"2015-12-01T18:32:00","guid":{"rendered":"http:\/\/kudzia.eu\/b\/?p=2555"},"modified":"2022-12-13T15:15:54","modified_gmt":"2022-12-13T14:15:54","slug":"mounting-partitions-from-within-of-the-vmwares-vmdk-file","status":"publish","type":"post","link":"https:\/\/kudzia.eu\/b\/2015\/12\/mounting-partitions-from-within-of-the-vmwares-vmdk-file\/","title":{"rendered":"mounting partitions from within of the vmware&#8217;s .vmdk file or kvm&#8217;s qcow2"},"content":{"rendered":"<p>i&#8217;m taking backups of vmware esxi vms weekly using <a href=\"https:\/\/github.com\/lamw\/ghettoVCB\">ghettovcb<\/a>. it has been working greatly for many years. once in a while i need to recover a particular file from particular backup. there&#8217;s quicker way than just restoring the whole vm!<\/p>\n<p><!--more--><\/p>\n<p>few tools are needed:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nroot@host:~# apt-get install qemu-utils mount kpartx\r\n<\/pre>\n<p>my vmdk files are in the 2gbsparse format:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nroot@host:~# ls -la app0-1*\r\n-rw-r--r-- 1 ninja 1019  664535040 Aug  9 00:14 app0-1-s001.vmdk\r\n-rw-r--r-- 1 ninja 1019 1065877504 Aug  9 00:14 app0-1-s002.vmdk\r\n-rw-r--r-- 1 ninja 1019  648413184 Aug  9 00:14 app0-1-s003.vmdk\r\n-rw-r--r-- 1 ninja 1019  352387072 Aug  9 00:14 app0-1-s004.vmdk\r\n-rw-r--r-- 1 ninja 1019  316538880 Aug  9 00:14 app0-1-s005.vmdk\r\n-rw-r--r-- 1 ninja 1019  469565440 Aug  9 00:14 app0-1-s006.vmdk\r\n-rw-r--r-- 1 ninja 1019  570818560 Aug  9 00:14 app0-1-s007.vmdk\r\n-rw-r--r-- 1 ninja 1019  573767680 Aug  9 00:14 app0-1-s008.vmdk\r\n-rw-r--r-- 1 ninja 1019        798 Aug  9 00:14 app0-1.vmdk\r\n<\/pre>\n<p>but monolithic ones should work fine too<\/p>\n<p>first i need to convert the .vmdk format to qemu&#8217;s qcow2:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nroot@host:~# qemu-img convert app0-1.vmdk 1.qemu2\r\n<\/pre>\n<p>then find partitions within it and mount one that i&#8217;m interested in:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nroot@host:~# losetup \/dev\/loop7 1.qemu2\r\nroot@host:~# kpartx -va \/dev\/loop7\r\nroot@host:~# ls -la \/dev\/mapper\/loop*\r\nlrwxrwxrwx 1 root root 7 Dec  1 18:39 \/dev\/mapper\/loop7p1 -&gt; ..\/dm-2\r\nroot@host:~# mount \/dev\/mapper\/loop7p1 \/mnt\/tmp\r\n<\/pre>\n<p>and the cleanup:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nroot@host:~# umount \/mnt\/tmp\r\nroot@host:~# kpartx -d \/dev\/loop7\r\nroot@host:~# losetup -d \/dev\/loop7\r\n<\/pre>\n<p><b>2017-11-21 edit<\/b>:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nguestmount -a server1-0.vmdk -i --ro \/mnt\/test\/\r\n<\/pre>\n<p>worked fine on the <a href=\"https:\/\/github.com\/lamw\/ghettoVCB\">ghettoVCB<\/a>-created backup.<\/p>\n<p><b>2022-12-13 edit<\/b>:<br \/>\nfor qcow2 files:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nmodprobe nbd max_part=8\r\n# i'm using -r \/ read only mostly because my backup is likely a mounted user-space file system from borg backup\r\nqemu-nbd -r --connect=\/dev\/nbd0 \/mnt\/tmp0\/backup\/vm-vda.qcow2\r\nfdisk \/dev\/nbd0 -l\r\n# see the partition names\r\n\r\n# also here read-only to let it mount from borg backup\r\nmount -o noload,ro \/dev\/nbd0p1 \/mnt\/tmp1\/\r\n\r\n# once all is done:\r\numount \/mnt\/somepoint\/\r\nqemu-nbd --disconnect \/dev\/nbd0\r\nrmmod nbd\r\n<\/pre>\n<p>based on https:\/\/gist.github.com\/shamil\/62935d9b456a6f9877b5<\/p>\n","protected":false},"excerpt":{"rendered":"<p>i&#8217;m taking backups of vmware esxi vms weekly using ghettovcb. it has been working greatly for many years. once in a while i need to recover a particular file from particular backup. there&#8217;s quicker way than just restoring the whole vm!<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[76,58],"class_list":["post-2555","post","type-post","status-publish","format-standard","hentry","category-tech","tag-esxi","tag-ghettovcb"],"_links":{"self":[{"href":"https:\/\/kudzia.eu\/b\/wp-json\/wp\/v2\/posts\/2555","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kudzia.eu\/b\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kudzia.eu\/b\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kudzia.eu\/b\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kudzia.eu\/b\/wp-json\/wp\/v2\/comments?post=2555"}],"version-history":[{"count":7,"href":"https:\/\/kudzia.eu\/b\/wp-json\/wp\/v2\/posts\/2555\/revisions"}],"predecessor-version":[{"id":3407,"href":"https:\/\/kudzia.eu\/b\/wp-json\/wp\/v2\/posts\/2555\/revisions\/3407"}],"wp:attachment":[{"href":"https:\/\/kudzia.eu\/b\/wp-json\/wp\/v2\/media?parent=2555"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kudzia.eu\/b\/wp-json\/wp\/v2\/categories?post=2555"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kudzia.eu\/b\/wp-json\/wp\/v2\/tags?post=2555"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}