{"id":130213,"date":"2022-12-02T08:05:00","date_gmt":"2022-12-02T08:05:00","guid":{"rendered":"https:\/\/fedoramagazine.org\/?p=36919"},"modified":"2022-12-02T08:05:00","modified_gmt":"2022-12-02T08:05:00","slug":"working-with-btrfs-subvolumes","status":"publish","type":"post","link":"https:\/\/sickgaming.net\/blog\/2022\/12\/02\/working-with-btrfs-subvolumes\/","title":{"rendered":"Working with Btrfs \u2013 Subvolumes"},"content":{"rendered":"<p>This article is part of a series of articles that takes a closer look at Btrfs, the default filesystem for Fedora Workstation and Fedora Silverblue since Fedora Linux 33.<\/p>\n<p>In case you missed it, here&#8217;s the previous article from the series: <a href=\"https:\/\/fedoramagazine.org\/working-with-btrfs-general-concepts\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/fedoramagazine.org\/working-with-btrfs-general-concepts\/<\/a><\/p>\n<p> <span id=\"more-36919\"><\/span> <\/p>\n<h2>Introduction<\/h2>\n<p>Subvolumes allow for the partitioning of a Btrfs filesystem into separate sub-filesystems. This means that you can mount subvolumes from a Btrfs filesystem as if they were independent filesystems. In addition, you can, for example, define the maximum space a subvolume may take up via qgroups (We&#8217;ll talk about this in another article in this series), or use subvolumes to specifically include or exclude files from snapshots (We&#8217;ll talk about this, too, in another article in this series). Every default Fedora Workstation and Fedora Silverblue installation since Fedora Linux 33 makes use of subvolumes. In this article we will explore how it works.<\/p>\n<p>Below you will find a lot of examples related to subvolumes. If you want to follow along, you must have access to some Btrfs filesystem and root access. You can verify whether your <em>\/home\/<\/em> directory is Btrfs via the following command:<\/p>\n<pre class=\"wp-block-preformatted\">$ findmnt -no FSTYPE \/home\nbtrfs<\/pre>\n<p>This command will output the name of the filesystem of your <em>\/home\/<\/em> directory. If it says <em>btrfs<\/em>, you&#8217;re all set. Let&#8217;s create a new directory to perform some experiments in:<\/p>\n<pre class=\"wp-block-preformatted\">$ mkdir ~\/btrfs-subvolume-test\n$ cd ~\/btrfs-subvolume-test<\/pre>\n<p>In the text below, you will find lots of command outputs in boxes such as shown above. Please keep in mind while reading\/comparing command outputs that the <strong>box contents are wrapped at the end of the line<\/strong>. This makes it difficult to recognize long lines that are broken across multiple lines for readability. When in doubt, try to resize your browser window and see how the text behaves!<\/p>\n<\/p>\n<h2>Creating and playing with subvolumes<\/h2>\n<p>We can create a Btrfs subvolume with the following command:<\/p>\n<pre class=\"wp-block-preformatted\">$ sudo btrfs subvolume create first\nCreate subvolume '.\/first'<\/pre>\n<p>When we inspect the current directory we will see that it now has a new folder named <em>first<\/em>. Note the first character <em>d<\/em> in the output below:<\/p>\n<pre class=\"wp-block-preformatted\">$ ls -l\ntotal 0\ndrwxr-xr-x. 1 root root 0 Oct 15 18:09 first<\/pre>\n<p>We can handle this like any regular folder: We can rename it, move it, create new files and folders inside, etc. Note that the folder belongs to root, so we must be root to do these things.<\/p>\n<p>If it acts like a folder and looks like a folder, how do we know whether it&#8217;s a Btrfs subvolume? We can use the <em>btrfs<\/em> tools to list all subvolumes:<\/p>\n<pre class=\"wp-block-preformatted\">$ sudo btrfs subvolume list .\nID 256 gen 30 top level 5 path home\nID 257 gen 30 top level 5 path root\nID 258 gen 25 top level 257 path root\/var\/lib\/machines\nID 259 gen 29 top level 256 path hartan\/btrfs-subvolume-test\/first<\/pre>\n<p>If you&#8217;re on a recent and unmodified Fedora Linux installation you will likely see the same output as above. We will inspect <em>home<\/em> and <em>root<\/em> as well as the meaning of all the numbers later. For now, we see that there is a subvolume at the path we specified. We can limit the output to the subvolumes below our current location:<\/p>\n<pre class=\"wp-block-preformatted\">$ sudo btrfs subvolume list -o .\nID 259 gen 29 top level 256 path home\/hartan\/btrfs-subvolume-test\/first<\/pre>\n<p>Let&#8217;s rename the subvolume:<\/p>\n<pre class=\"wp-block-preformatted\">$ sudo mv first second\n$ sudo btrfs subvolume list -o .\nID 259 gen 29 top level 256 path home\/hartan\/btrfs-subvolume-test\/second<\/pre>\n<p>We can also nest subvolumes:<\/p>\n<pre class=\"wp-block-preformatted\">$ sudo btrfs subvolume create second\/third\nCreate subvolume 'second\/third'\n$ sudo btrfs subvolume list .\nID 256 gen 34 top level 5 path home\nID 257 gen 37 top level 5 path root\nID 258 gen 25 top level 257 path root\/var\/lib\/machines\nID 259 gen 37 top level 256 path hartan\/btrfs-subvolume-test\/second\nID 260 gen 37 top level 259 path hartan\/btrfs-subvolume-test\/second\/third<\/pre>\n<p>And we can also remove subvolumes, either like we remove folders:<\/p>\n<pre class=\"wp-block-preformatted\">$ sudo rm -r second\/third<\/pre>\n<p>or via special Btrfs commands:<\/p>\n<pre class=\"wp-block-preformatted\">$ sudo btrfs subvolume delete second\nDelete subvolume (no-commit): '\/home\/hartan\/btrfs-subvolume-test\/second'<\/pre>\n<\/p>\n<h2>Handling Btrfs subvolumes like separate filesystems<\/h2>\n<p>The introduction mentioned that Btrfs subvolumes act like separate filesystems. This means that we can mount subvolumes and pass some mount options to them. First we will create a small folder structure to get a better understanding of what happens:<\/p>\n<pre class=\"wp-block-preformatted\">$ mkdir -p a a\/1 a\/1\/b\n$ sudo btrfs subvolume create a\/2\nCreate subvolume 'a\/2'\n$ sudo touch a\/1\/c a\/1\/b\/d a\/2\/e<\/pre>\n<p>Here&#8217;s what the structure looks like:<\/p>\n<pre class=\"wp-block-preformatted\">$ tree\n.\n\u2514\u2500\u2500 a \u251c\u2500\u2500 1 \u2502&nbsp;&nbsp; \u251c\u2500\u2500 b \u2502&nbsp;&nbsp; \u2502&nbsp;&nbsp; \u2514\u2500\u2500 d \u2502&nbsp;&nbsp; \u2514\u2500\u2500 c \u2514\u2500\u2500 2 \u2514\u2500\u2500 e 4 directories, 3 files<\/pre>\n<p>Verify that there is now a new Btrfs subvolume:<\/p>\n<pre class=\"wp-block-preformatted\">$ sudo btrfs subvolume list -o .\nID 261 gen 41 top level 256 path home\/hartan\/btrfs-subvolume-test\/a\/2<\/pre>\n<p>To mount the subvolume we must know the path of the block device where the Btrfs filesystem subvolume resides. The following command tells us:<\/p>\n<pre class=\"wp-block-preformatted\">$ findmnt -vno SOURCE \/home\/\n\/dev\/vda3<\/pre>\n<p>Now we can mount the subvolume. Make sure you replace the arguments with the values for your PC:<\/p>\n<pre class=\"wp-block-preformatted\">$ sudo mount -o subvol=home\/hartan\/btrfs-subvolume-test\/a\/2 \/dev\/vda3 a\/1\/b<\/pre>\n<p>Observe that we use the <em>-o<\/em> flag to give additional options to the mount program. In this case we tell it to mount the subvolume with name <em>home\/hartan\/btrfs-subvolume-test\/a\/2<\/em> from the btrfs filesystem on device <em>\/dev\/vda3<\/em>. This is a Btrfs-specific option and isn&#8217;t available in other filesystems.<\/p>\n<p>We see that the directory structure has changed:<\/p>\n<pre class=\"wp-block-preformatted\">$ tree\n.\n\u2514\u2500\u2500 a \u251c\u2500\u2500 1 \u2502&nbsp;&nbsp; \u251c\u2500\u2500 b \u2502&nbsp;&nbsp; \u2502&nbsp;&nbsp; \u2514\u2500\u2500 e \u2502&nbsp;&nbsp; \u2514\u2500\u2500 c \u2514\u2500\u2500 2 \u2514\u2500\u2500 e 4 directories, 3 files<\/pre>\n<p>Note that the file <em>e<\/em> exists twice now and <em>d<\/em> is gone. We are now able to access the same Btrfs subvolume by two different paths. All changes we perform in either of the paths are immediately reflected in all other locations:<\/p>\n<pre class=\"wp-block-preformatted\">$ sudo touch a\/1\/b\/x\n$ ls -lA a\/2\ntotal 0\n-rw-r--r--. 1 root root 0 Oct 15 18:14 e\n-rw-r--r--. 1 root root 0 Oct 15 18:16 x<\/pre>\n<p>Let&#8217;s play some more with the mount options. For example we can mount the subvolume as read-only under <em>a\/1\/b<\/em> like this (Insert arguments for your PC!):<\/p>\n<pre class=\"wp-block-preformatted\">$ sudo umount a\/1\/b\n$ sudo mount -o subvol=home\/hartan\/btrfs-subvolume-test\/a\/2,ro \/dev\/vda3 a\/1\/b<\/pre>\n<p>We use the same command as above, except that we add <em>ro<\/em> at the end. Now we can no longer create files via this mount:<\/p>\n<pre class=\"wp-block-preformatted\">$ sudo touch a\/1\/b\/y\ntouch: cannot touch 'a\/1\/b\/y': Read-only file system<\/pre>\n<p>but accessing the subvolume directly still works like before:<\/p>\n<pre class=\"wp-block-preformatted\">$ sudo touch a\/2\/y\n$ tree\n.\n\u2514\u2500\u2500 a \u251c\u2500\u2500 1 \u2502&nbsp;&nbsp; \u251c\u2500\u2500 b \u2502&nbsp;&nbsp; \u2502&nbsp;&nbsp; \u251c\u2500\u2500 e \u2502&nbsp;&nbsp; \u2502&nbsp;&nbsp; \u251c\u2500\u2500 x \u2502&nbsp;&nbsp; \u2502&nbsp;&nbsp; \u2514\u2500\u2500 y \u2502&nbsp;&nbsp; \u2514\u2500\u2500 c \u2514\u2500\u2500 2 \u251c\u2500\u2500 e \u251c\u2500\u2500 x \u2514\u2500\u2500 y 4 directories, 7 files<\/pre>\n<p>Don&#8217;t forget to clean up before we move on:<\/p>\n<pre class=\"wp-block-preformatted\">$ sudo rm -rf a\nrm: cannot remove 'a\/1\/b\/e': Read-only file system\nrm: cannot remove 'a\/1\/b\/x': Read-only file system\nrm: cannot remove 'a\/1\/b\/y': Read-only file system<\/pre>\n<p>Oh no, what happened? Well, since we mounted the subvolume <em>read-only<\/em> above, we cannot delete it. A deletion from a filesystems&#8217; perspective is a write operation: To delete <strong><em>a\/1\/b\/e<\/em>,<\/strong> we remove the directory entry for <em><strong>e<\/strong><\/em> from the directory contents of its parent directory, <em><strong>a\/1\/b<\/strong><\/em> in this case. In other words, we must <em>write<\/em> to <strong><em>a\/1\/b<\/em> <\/strong>to tell it that <em><strong>e<\/strong><\/em> doesn&#8217;t exist any longer. So first we unmount the subvolume again, and then we remove the folder:<\/p>\n<pre class=\"wp-block-preformatted\">$ sudo umount a\/1\/b\n$ sudo rm -rf a\n$ tree\n. 0 directories, 0 files<\/pre>\n<\/p>\n<h2>Subvolume IDs<\/h2>\n<p>Remember the first output of the <em>subvolume list<\/em> subcommand? That contained a lot of numbers, so let&#8217;s see what that is all about. I copied the output here to take another look:<\/p>\n<pre class=\"wp-block-preformatted\">ID 256 gen 30 top level 5 path home\nID 257 gen 30 top level 5 path root\nID 258 gen 25 top level 257 path root\/var\/lib\/machines\nID 259 gen 29 top level 256 path hartan\/btrfs-subvolume-test\/first<\/pre>\n<p>We see there are three columns of numbers, each prefixed with a few letters to describe what they do. The first column of numbers is a subvolumes ID. Subvolume IDs are unique in a Btrfs filesystem and as such uniquely identify subvolumes. This means that the subvolume named <em>home<\/em> can also be referred to by its ID <strong>256<\/strong>. In the mount command above we wrote:<\/p>\n<pre class=\"wp-block-preformatted\">$ sudo mount -o subvol=hartan\/...<\/pre>\n<p>Another perfectly legal option is to use subvolume IDs:<\/p>\n<pre class=\"wp-block-preformatted\">$ sudo mount -o subvolid=...<\/pre>\n<p>Subvolume IDs start at <strong>256<\/strong> and increase by 1 for every created subvolume. There is however one exception to this: The filesystem root always has the subvolume name <em>\/<\/em> and the subvolume ID 5. That is right, even the root of a Btrfs filesystem is technically a subvolume. This is just implicitly known, hence it doesn&#8217;t show up in the output of <em>btrfs subvolume list<\/em>. If you mount a Btrfs filesystem without the <em>subvol<\/em> or <em>subvolid<\/em> argument, the root subvolume with <em>subvolid=5<\/em> is assumed as default. Below we&#8217;ll see an example of when one may want to explicitly mount the filesystem root.<\/p>\n<p>The second column of numbers is the generation counter and incremented on every Btrfs transaction. This is mostly an internal counter and won&#8217;t be discussed further here.<\/p>\n<p>Finally, the third column of numbers is the subvolume ID of the subvolumes <em>parent<\/em>. In the output above we see that both subvolume <em>home<\/em> and <em>root<\/em> have 5 as their parent subvolume ID. Remember that ID 5 has a special meaning: It is the filesystem root. So we know that <em>home<\/em> and <em>root<\/em> are children to the root subvolume. <em>hartan\/btrfs-subvolume-test\/first <\/em>on the other hand is a child of the subvolume with ID 256, which in our case is <em>home<\/em>.<\/p>\n<p>In the next section we have a look at where the subvolumes <em>root<\/em> and <em>home<\/em> come from.<\/p>\n<\/p>\n<h2>Inspecting default subvolumes in Fedora Linux<\/h2>\n<p>When you create a new Btrfs filesystem from scratch, there will be no subvolumes in it (Except of course for the root subvolume). So where do the <em>home<\/em> and <em>root<\/em> subvolumes in Fedora Linux come from?<\/p>\n<p>These are created by the installer at install time. Traditional installations would often include a separate filesystem partition for the <em>\/<\/em> and <em>\/home<\/em> directories. During boot, these are then appropriately mounted to assemble one full filesystem. But there is an issue with this approach: Unless you use technologies such as <em>lvm<\/em>, it is very hard to change a partitions size at some point in the future. As a consequence you may end up in a situation where either your <em>\/<\/em> or <em>\/home<\/em> runs out of space, while the respective other partition has lots of unused, free space left.<\/p>\n<p>Since Btrfs subvolumes are all part of the same filesystem, they will share the space that the underlying filesystem offers. Remember when we created the subvolumes above? We never told Btrfs how big they are: A subvolume can take up all the space the filesystem has, by default nothing keeps it from doing so. However, we <em>could<\/em> dynamically impose size limits via Btrfs qgroups, which can also be modified during runtime (And we&#8217;ll see how in a later article in this series).<\/p>\n<p>Another advantage of separating <em>\/<\/em> and <em>\/home<\/em> is that we can take <em>snapshots<\/em> separately. A subvolume is a boundary for snapshots, and snapshots will never contain the contents of other subvolumes below the subvolume that the snapshot is taken of. More details on snapshots follow in the next article in this series.<\/p>\n<p>Enough of the theory! Let&#8217;s see what this is all about. First ensure that your root filesystem is in fact of type Btrfs:<\/p>\n<pre class=\"wp-block-preformatted\">$ findmnt -no FSTYPE \/\nbtrfs<\/pre>\n<p>And then get the partition it resides on:<\/p>\n<pre class=\"wp-block-preformatted\">$ findmnt -vno SOURCE \/\n\/dev\/vda3<\/pre>\n<p>Remember we can mount the filesystem root by its special subvolume ID 5 (Adapt the filesystem partition!):<\/p>\n<pre class=\"wp-block-preformatted\">$ mkdir fedora-rootsubvol\n$ sudo mount -o subvolid=5 \/dev\/vda3 .\/fedora-rootsubvol\n$ ls fedora-rootsubvol\/\nhome root<\/pre>\n<p>And there are the subvolumes of our Fedora Linux installation! But how does Fedora Linux know that the subvolume <em>root<\/em> belongs to <em>\/<\/em>, and <em>home<\/em> belongs to <em>\/home<\/em>?<\/p>\n<p>The file <em>\/etc\/fstab<\/em> contains so-called static information about the filesystem. In simple terms, during booting your system reads this file, line by line, and mounts all the filesystems listed there. On my system, the file looks like this:<\/p>\n<pre class=\"wp-block-preformatted\">$ cat \/etc\/fstab\n# [ ... ]\n# \/etc\/fstab\n# Created by anaconda on Sat Oct 15 12:01:57 2022\n# [ ... ]\n#\nUUID=5e4e42bb-4f2f-4f0e-895f-d1a46ea47807 \/ btrfs subvol=root,compress=zstd:1 0 0\nUUID=e3a798a8-b8f2-40ca-9da7-5e292a6412aa \/boot ext4 defaults 1 2\nUUID=5e4e42bb-4f2f-4f0e-895f-d1a46ea47807 \/home btrfs subvol=home,compress=zstd:1 0 0<\/pre>\n<p>(Note that the &#8220;UUID&#8221; lines above have been wrapped into two lines)<\/p>\n<p>The <em>UUID<\/em> at the beginning of each line is simply a means to identify disks and filesystem partitions in your system (roughly equivalent to <em>\/dev\/vda3<\/em> as I used above). The second column is the path in the filesystem tree where this filesystem should be mounted. The third column is the filesystem type. We see that the entries for <em>\/<\/em> and <em>\/home<\/em> are of type <em>btrfs<\/em>, just what we expect! Finally, in the fourth column we see the magic: These are the mount options, and there it says to mount <em>\/<\/em> with the option <em>subvol=root<\/em>. That is exactly the subvolume we saw in the output of <em>btrfs subvolume list \/<\/em> all the time!<\/p>\n<p>With this information, we can reconstruct the call to <em>mount<\/em> that creates this filesystem entry:<\/p>\n<pre class=\"wp-block-preformatted\">$ sudo mount -o subvol=root,compress=zstd:1 UUID=5e4e42bb-4f2f-4f0e-895f-d1a46ea47807 \/<\/pre>\n<pre class=\"wp-block-preformatted\">(again, the line above has been wrapped into two)<\/pre>\n<p>And that is how Fedora Linux uses Btrfs subvolumes! If you&#8217;re curious as to why Fedora Linux decided to use Btrfs as the default filesystem, refer to the change proposal linked below <a href=\"#sources\">[1]<\/a>.<\/p>\n<\/p>\n<h2>More on Btrfs subvolumes<\/h2>\n<p>The Btrfs wiki has additional information on subvolumes and most importantly on the mount options that can be applied to Btrfs subvolumes. Some options, like <em>compress<\/em> can only be applied on a filesystem-wide level and thus affect all subvolumes of a Btrfs filesystem. You can find the entry linked below <a href=\"#sources\">[2]<\/a>.<\/p>\n<p>If you find it confusing to tell which directories are plain directories and which are subvolumes, you can feel free to adopt a special naming convention for your subvolumes. For example, you could prefix your subvolume names with an &#8220;@&#8221; to make them easily distinguishable.<\/p>\n<p>Now that you know that subvolumes behave like filesystems, one may ask how best to place a subvolume in a certain location. Say you want a Btrfs subvolume under <em>~\/games<\/em>, where your home directory (<em>~<\/em>) is itself a subvolume, how can you achieve that? Given the example above, you may use a command like <em>sudo btrfs subvolume create ~\/games<\/em>. This way, you create so-called <em>nested<\/em> subvolumes: Inside your subvolume <em>~<\/em>, there is now a subvolume <em>games<\/em>. That is a perfectly fine way to approach this situation.<\/p>\n<p>Another valid solution is to do what Fedora does by default: Create all subvolumes under the root subvolume (i.e. such that their parent subvolume ID is 5), and mount them into the appropriate locations. The Btrfs wiki has an overview of these approaches along with a short discussion about their respective implications on filesystem management <a href=\"#sources\">[5]<\/a>.<\/p>\n<\/p>\n<h2>Conclusion<\/h2>\n<p>In this article we discovered Btrfs subvolumes, which act like separate Btrfs filesystems inside a Btrfs filesystem. We learned how to create, mount and delete subvolumes. Finally, we explored how Fedora Linux makes use of subvolumes &#8211; without us noticing at all.<\/p>\n<p>The next articles in this series will deal with:<\/p>\n<ul>\n<li>Snapshots &#8211; Going back in time<\/li>\n<li>Compression &#8211; Transparently saving storage space<\/li>\n<li>Qgroups &#8211; Limiting your filesystem size<\/li>\n<li>RAID &#8211; Replace your mdadm configuration<\/li>\n<\/ul>\n<p>If there are other topics related to Btrfs that you want to know more about, have a look at the Btrfs Wiki <a href=\"#sources\">[3]<\/a> and Docs <a href=\"#sources\">[4]<\/a>. Don&#8217;t forget to check out the first article of this series, if you haven&#8217;t already! If you feel that there is something missing from this article series, let us know in the comments below. See you in the next article!<\/p>\n<\/p>\n<h2 id=\"sources\">Sources<\/h2>\n<p>[1]: <a href=\"https:\/\/fedoraproject.org\/wiki\/Changes\/BtrfsByDefault#Benefit_to_Fedora\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/fedoraproject.org\/wiki\/Changes\/BtrfsByDefault#Benefit_to_Fedora<\/a><br \/>[2]: <a href=\"https:\/\/btrfs.readthedocs.io\/en\/latest\/Subvolumes.html\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/btrfs.readthedocs.io\/en\/latest\/Subvolumes.html<\/a><br \/>[3]: <a href=\"https:\/\/btrfs.wiki.kernel.org\/index.php\/Main_Page\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/btrfs.wiki.kernel.org\/index.php\/Main_Page<\/a><br \/>[4]: <a href=\"https:\/\/btrfs.readthedocs.io\/en\/latest\/Introduction.html\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/btrfs.readthedocs.io\/en\/latest\/Introduction.html<\/a><br \/>[5]: <a href=\"https:\/\/btrfs.wiki.kernel.org\/index.php\/SysadminGuide#Layout\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/btrfs.wiki.kernel.org\/index.php\/SysadminGuide#Layout<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This article is part of a series of articles that takes a closer look at Btrfs, the default filesystem for Fedora Workstation and Fedora Silverblue since Fedora Linux 33. In case you missed it, here&#8217;s the previous article from the series: https:\/\/fedoramagazine.org\/working-with-btrfs-general-concepts\/ Introduction Subvolumes allow for the partitioning of a Btrfs filesystem into separate sub-filesystems. [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[48],"tags":[45,61,46,47],"class_list":["post-130213","post","type-post","status-publish","format-standard","hentry","category-fedora-os","tag-fedora","tag-fedora-project-community","tag-magazine","tag-news"],"_links":{"self":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/posts\/130213","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/comments?post=130213"}],"version-history":[{"count":0,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/posts\/130213\/revisions"}],"wp:attachment":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/media?parent=130213"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/categories?post=130213"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/tags?post=130213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}