{"id":907,"date":"2023-12-19T09:55:20","date_gmt":"2023-12-19T09:55:20","guid":{"rendered":"http:\/\/192.168.50.210\/wordpress\/?p=907"},"modified":"2024-01-10T15:32:08","modified_gmt":"2024-01-10T15:32:08","slug":"rpi-nas-extras-greyhole-trash","status":"publish","type":"post","link":"https:\/\/mpr-projects.com\/index.php\/2023\/12\/19\/rpi-nas-extras-greyhole-trash\/","title":{"rendered":"RPi NAS: Extras &#8211; Greyhole Trash"},"content":{"rendered":"\n<p>Immediately removing deleted files from the NAS can be dangerous. If you accidentally delete a file then there&#8217;s no easy way to recover it. This can be prevented by using a Trash, which is enabled by default in Greyhole. In this post we&#8217;ll look at different options of using Greyhole&#8217;s Trash.<\/p>\n\n\n<p>This post is part of a series about building a Network-Attached Storage (NAS) with redundancy using a Raspberry Pi (RPi). See <a href=\"https:\/\/mpr-projects.com\/index.php\/2023\/11\/13\/building-a-raspberry-pi-nas-with-data-redundancy-part-1-overview\/#RPi_NAS_Post_List\" data-type=\"post\" data-id=\"8\">here<\/a> for a list of all posts in this series.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" style=\"margin-top:var(--wp--preset--spacing--30);margin-bottom:var(--wp--preset--spacing--30)\"\/>\n\n\n\n<p>By default Greyhole uses a Trash. So when we delete a file from a share it&#8217;s not actually deleted but it gets moved to a folder called <em>.gh_trash<\/em> which is located on the storage drives, for example at <em>\/nas_mounts\/hdd1\/gh\/.gh_trash<\/em>. The space used by the file is not released until we empty the Trash.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Disabling Greyhole Trash<\/h2>\n\n\n\n<p>We can disable the Trash if we really don&#8217;t want to use it. On the <a href=\"https:\/\/github.com\/gboudreau\/Greyhole\/wiki\/Admin-Web-UI\" data-type=\"link\" data-id=\"https:\/\/github.com\/gboudreau\/Greyhole\/wiki\/Admin-Web-UI\" target=\"_blank\" rel=\"noreferrer noopener\">web interface<\/a>, go to <em>Greyhole Config &#8211; Trash<\/em> and adjust the options shown there:<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69e7a95b23f77&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69e7a95b23f77\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"419\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/mpr-projects.com\/wp-content\/uploads\/2023\/12\/Greyhole_Trash_1-1024x419.png\" alt=\"\" class=\"wp-image-942\" srcset=\"https:\/\/mpr-projects.com\/wp-content\/uploads\/2023\/12\/Greyhole_Trash_1-1024x419.png 1024w, https:\/\/mpr-projects.com\/wp-content\/uploads\/2023\/12\/Greyhole_Trash_1-300x123.png 300w, https:\/\/mpr-projects.com\/wp-content\/uploads\/2023\/12\/Greyhole_Trash_1-768x314.png 768w, https:\/\/mpr-projects.com\/wp-content\/uploads\/2023\/12\/Greyhole_Trash_1-1536x628.png 1536w, https:\/\/mpr-projects.com\/wp-content\/uploads\/2023\/12\/Greyhole_Trash_1-2048x837.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<p>We can also use Greyhole&#8217;s configuration file, <em>\/etc\/greyhole.conf<\/em>. It gives us a bit more flexibility because we can enable or disable Trash for each Samba share separately, independently of the other shares. For example, if we don&#8217;t want to use a Trash for share <em>Entertainment<\/em> then we could write:<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69e7a95b24356&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69e7a95b24356\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"373\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/mpr-projects.com\/wp-content\/uploads\/2023\/12\/Greyhole_Trash_2-1024x373.png\" alt=\"\" class=\"wp-image-943\" srcset=\"https:\/\/mpr-projects.com\/wp-content\/uploads\/2023\/12\/Greyhole_Trash_2-1024x373.png 1024w, https:\/\/mpr-projects.com\/wp-content\/uploads\/2023\/12\/Greyhole_Trash_2-300x109.png 300w, https:\/\/mpr-projects.com\/wp-content\/uploads\/2023\/12\/Greyhole_Trash_2-768x279.png 768w, https:\/\/mpr-projects.com\/wp-content\/uploads\/2023\/12\/Greyhole_Trash_2-1536x559.png 1536w, https:\/\/mpr-projects.com\/wp-content\/uploads\/2023\/12\/Greyhole_Trash_2.png 1660w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<p>I occasionally delete files by accident so for me having a Trash is very useful.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Emptying Trash<\/h2>\n\n\n\n<p>From now on I&#8217;m going to assume that we&#8217;re using Greyhole&#8217;s Trash. If we frequently delete or modify files then our Trash bin will fill up. To empty it we can go to <em>Trash Manager<\/em> on the web interface. There we&#8217;ll see a list of everything in our Trash bin. The paths are clickable so we can go deeper into the folder structure and choose exactly what we want to remove (or restore).<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69e7a95b24868&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69e7a95b24868\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"387\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/mpr-projects.com\/wp-content\/uploads\/2023\/12\/Greyhole_Trash_4-1024x387.png\" alt=\"\" class=\"wp-image-947\" srcset=\"https:\/\/mpr-projects.com\/wp-content\/uploads\/2023\/12\/Greyhole_Trash_4-1024x387.png 1024w, https:\/\/mpr-projects.com\/wp-content\/uploads\/2023\/12\/Greyhole_Trash_4-300x113.png 300w, https:\/\/mpr-projects.com\/wp-content\/uploads\/2023\/12\/Greyhole_Trash_4-768x290.png 768w, https:\/\/mpr-projects.com\/wp-content\/uploads\/2023\/12\/Greyhole_Trash_4-1536x581.png 1536w, https:\/\/mpr-projects.com\/wp-content\/uploads\/2023\/12\/Greyhole_Trash_4.png 1888w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<p>We can also empty the Trash from the command line with<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo greyhole --empty-trash<\/code><\/pre>\n\n\n\n<p>This doesn&#8217;t give us the same fine-grained control as in the web interface but it may still be useful.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Trash Shares<\/h2>\n\n\n\n<p>To empty the Trash as we did in the previous section we have to be logged into the Raspberry Pi. However, there&#8217;s also an option to mount the Trash as a Samba share. So when we delete a file on a regular share it will show up on the Trash share. If we delete it on the Trash share then it will be gone forever.<\/p>\n\n\n\n<p>One way of setting up the Trash share is by editing <em>\/etc\/samba\/smb.conf<\/em>. The name of the share can be<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em><em>Greyhole Trash<\/em><\/em>,<\/li>\n\n\n\n<li><em>Greyhole Recycle Bin<\/em> or<\/li>\n\n\n\n<li><em>Greyhole Attic<\/em>.<\/li>\n<\/ul>\n\n\n\n<p>We also need to make sure that the drive is managed by Greyhole and that it can be edited by our users (so they can delete files from it). The image below shows which options we need to set for the Trash share to work.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69e7a95b24f0c&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69e7a95b24f0c\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1010\" height=\"316\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/mpr-projects.com\/wp-content\/uploads\/2023\/12\/Greyhole_Trash_5.png\" alt=\"\" class=\"wp-image-966\" srcset=\"https:\/\/mpr-projects.com\/wp-content\/uploads\/2023\/12\/Greyhole_Trash_5.png 1010w, https:\/\/mpr-projects.com\/wp-content\/uploads\/2023\/12\/Greyhole_Trash_5-300x94.png 300w, https:\/\/mpr-projects.com\/wp-content\/uploads\/2023\/12\/Greyhole_Trash_5-768x240.png 768w\" sizes=\"auto, (max-width: 1010px) 100vw, 1010px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<p>Another way to set up a Trash share is via the web interface. Go to <em>Samba Shares &#8211; Add Samba Share<\/em>. The requirements for the share name and additional options are the same as shown above. Other additional options, such as <em>create mask<\/em>, will be ignored<sup data-fn=\"ccc1a8d0-b1d3-447b-a27c-4265e7e7b8a7\" class=\"fn\"><a href=\"#ccc1a8d0-b1d3-447b-a27c-4265e7e7b8a7\" id=\"ccc1a8d0-b1d3-447b-a27c-4265e7e7b8a7-link\">1<\/a><\/sup>.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69e7a95b25364&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69e7a95b25364\" class=\"wp-block-image aligncenter size-medium wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"286\" height=\"300\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/mpr-projects.com\/wp-content\/uploads\/2023\/12\/Greyhole_Trash_3-286x300.png\" alt=\"\" class=\"wp-image-944\" srcset=\"https:\/\/mpr-projects.com\/wp-content\/uploads\/2023\/12\/Greyhole_Trash_3-286x300.png 286w, https:\/\/mpr-projects.com\/wp-content\/uploads\/2023\/12\/Greyhole_Trash_3.png 702w\" sizes=\"auto, (max-width: 286px) 100vw, 286px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<p>Note, the Trash share will only show files that were deleted after the Trash share has been set up. For files that were deleted earlier we have to manually empty the Trash as discussed in the previous section.<\/p>\n\n\n\n<p>There&#8217;s one more point that&#8217;s worth knowing. Let&#8217;s assume we have a share <em>SecretShare<\/em> that can only be mounted by some users (e.g.  Samba option <em>valid users<\/em> or some strict folder permissions). When a file on that share gets deleted it will show up in the Trash share. Every user, including those that don&#8217;t have access to <em>SecretShare<\/em>, will be able to see the folder structure when they browse through the Trash share. If the file permissions allow it then they may even be able to read the deleted file&#8217;s contents. So if you want the contents of your shares to stay secret then make sure you immediately remove deleted files from the Trash share or don&#8217;t use a Trash share at all<sup data-fn=\"fed48bde-9143-479e-89c2-8d1c8b931136\" class=\"fn\"><a href=\"#fed48bde-9143-479e-89c2-8d1c8b931136\" id=\"fed48bde-9143-479e-89c2-8d1c8b931136-link\">2<\/a><\/sup>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Deleting old Files from Trash<\/h2>\n\n\n\n<p>The command <code>sudo greyhole --empty-trash<\/code> deletes all files in Trash, irrespective of their age. I find that, and the other options we&#8217;ve discussed so far, a bit cumbersome. Ideally my files are kept in Trash for some time and if they&#8217;re not restored when the time is up then they should be deleted automatically, without me having to login.<\/p>\n\n\n\n<p>On Greyhole&#8217;s github page there is an <a href=\"https:\/\/github.com\/gboudreau\/Greyhole\/issues\/3\">issue<\/a> about the topic with a shell script that deletes files older than a certain age. I prefer the readability of Python scripts over shell scripts so I wrote a similar script which you can find <a href=\"https:\/\/github.com\/mpr-projects\/RPi-NAS\/blob\/7c485579def25a6a96bafee10824bb4255151dbd\/clean_nas_trash.py\">here<\/a>. After downloading the script we have to make it executable with <code>sudo chmod +x clean_nas_trash.py<\/code>. <\/p>\n\n\n\n<p>To enable it we simply add an entry to <em>crontab<\/em>. Open <em>crontab<\/em> with<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo crontab -e<\/code><\/pre>\n\n\n\n<p>To empty the Trash once a week, at 2am on Monday, we add the following line:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>0 2 * * 1 \/path\/to\/clean_nas_trash.py<\/code><\/pre>\n\n\n\n<p>In the <em>crontab<\/em> file there&#8217;s a description of what the first five digits mean. I put my file to <em>\/usr\/local\/bin\/clean_nas_trash.py<\/em>. To move it there we need root privileges (e.g. <code>sudo mv clean_nas_trash.py \/usr\/local\/bin\/clean_nas_trash.py<\/code>).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" style=\"margin-top:var(--wp--preset--spacing--30);margin-bottom:var(--wp--preset--spacing--30)\"\/>\n\n\n\n<p>Footnotes:<\/p>\n\n\n<ol class=\"wp-block-footnotes\"><li id=\"ccc1a8d0-b1d3-447b-a27c-4265e7e7b8a7\">Folders in the Trash share are generally owned by <em>root<\/em> with permissions 777 (i.e. full access for everybody). File permissions mirror those of the deleted files. <a href=\"#ccc1a8d0-b1d3-447b-a27c-4265e7e7b8a7-link\" aria-label=\"Jump to footnote reference 1\">\u21a9\ufe0e<\/a><\/li><li id=\"fed48bde-9143-479e-89c2-8d1c8b931136\">But note that the root user of the Raspberry Pi will always have full access to all data. <a href=\"#fed48bde-9143-479e-89c2-8d1c8b931136-link\" aria-label=\"Jump to footnote reference 2\">\u21a9\ufe0e<\/a><\/li><\/ol>","protected":false},"excerpt":{"rendered":"<p>Immediately removing deleted files from the NAS can be dangerous. If you accidentally delete a file then there&#8217;s no easy way to recover it. This can be prevented by using a Trash, which is enabled by default in Greyhole. In this post we&#8217;ll look at different options of using Greyhole&#8217;s Trash. By default Greyhole uses [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":974,"comment_status":"open","ping_status":"open","sticky":false,"template":"wp-custom-template-single-with-sidebar-1","format":"standard","meta":{"_eb_attr":"","footnotes":"[{\"content\":\"Folders in the Trash share are generally owned by <em>root<\/em> with permissions 777 (i.e. full access for everybody). File permissions mirror those of the deleted files.\",\"id\":\"ccc1a8d0-b1d3-447b-a27c-4265e7e7b8a7\"},{\"content\":\"But note that the root user of the Raspberry Pi will always have full access to all data.\",\"id\":\"fed48bde-9143-479e-89c2-8d1c8b931136\"}]"},"categories":[3,10],"tags":[9,7,4,5],"class_list":["post-907","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux","category-projects","tag-data-safety","tag-greyhole","tag-linux","tag-raspberry-pi"],"_links":{"self":[{"href":"https:\/\/mpr-projects.com\/index.php\/wp-json\/wp\/v2\/posts\/907","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mpr-projects.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mpr-projects.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mpr-projects.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mpr-projects.com\/index.php\/wp-json\/wp\/v2\/comments?post=907"}],"version-history":[{"count":17,"href":"https:\/\/mpr-projects.com\/index.php\/wp-json\/wp\/v2\/posts\/907\/revisions"}],"predecessor-version":[{"id":1240,"href":"https:\/\/mpr-projects.com\/index.php\/wp-json\/wp\/v2\/posts\/907\/revisions\/1240"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mpr-projects.com\/index.php\/wp-json\/wp\/v2\/media\/974"}],"wp:attachment":[{"href":"https:\/\/mpr-projects.com\/index.php\/wp-json\/wp\/v2\/media?parent=907"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mpr-projects.com\/index.php\/wp-json\/wp\/v2\/categories?post=907"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mpr-projects.com\/index.php\/wp-json\/wp\/v2\/tags?post=907"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}