[{"data":1,"prerenderedAt":1460},["ShallowReactive",2],{"blog-current-proper-chroot-in-rescue-mode-using-arch-chroot-en":3,"blog-previous-proper-chroot-in-rescue-mode-using-arch-chroot-en":272,"blog-next-proper-chroot-in-rescue-mode-using-arch-chroot-en":285,"blog-alt-de-proper-chroot-in-rescue-mode-using-arch-chroot-en":296,"blog-alt-en-proper-chroot-in-rescue-mode-using-arch-chroot-en":298,"employee-bernd-helm":299,"content-query-MZ7t3ppMsS":405,"content-query-Fqgo9f8ijK":924,"content-query-1PFeYVQSzn":1397,"related-refs-devops--en":1433},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"author":10,"image":11,"releaseDate":12,"blogCategories":13,"tags":16,"body":18,"_type":266,"_id":267,"_source":268,"_file":269,"_stem":270,"_extension":271},"/en/blog/proper-chroot-in-rescue-mode-using-arch-chroot","blog",false,"","Proper CHROOT in rescue mode using arch-chroot","Most Sysadmins know how to setup a basic chroot on a mounted filesystem (mount-binding dev, proc and sys) but this does not work in any case; for a complete chroot setup you would aso need dev/pts dev/shm, run, tmp, a working resolve.conf and more. After you have set it up, and you want to bring it ...","bernd-helm","/images/linux_os-mono.svg","2020-04-17",[14,15],"What moves us","Infrastructure",[17],"devops",{"type":19,"children":20,"toc":264},"root",[21,29,34,56,61,124,129,253,258],{"type":22,"tag":23,"props":24,"children":25},"element","p",{},[26],{"type":27,"value":28},"text","Most Sysadmins know how to set up a basic chroot on a mounted filesystem (mount-binding dev, proc and sys) but this does not work in any case; for a complete chroot setup you would aso need dev/pts dev/shm, run, tmp, a working resolve.conf and more. After you have set it up, and you want to bring it down, you have to do a lot of typing again. But wait! There is a better solution.",{"type":22,"tag":23,"props":30,"children":31},{},[32],{"type":27,"value":33},"There is a script called arch-chroot shipped with the Archlinux distribution, but it is not limited to be run with Archlinux. It works on any linux distri!",{"type":22,"tag":23,"props":35,"children":36},{},[37,39,46,48,54],{"type":27,"value":38},"For your convenience, I have ",{"type":22,"tag":40,"props":41,"children":43},"a",{"href":42},"https://gist.github.com/bhelm/65283c37a0cb585089041214002df4f7",[44],{"type":27,"value":45},"created a gist",{"type":27,"value":47}," for you. You can also use the Direct ",{"type":22,"tag":40,"props":49,"children":51},{"href":50},"https://gist.githubusercontent.com/bhelm/65283c37a0cb585089041214002df4f7/raw/536099a5f969a6888c85e48a487ec19870c596a2/arch-chroot.sh",[52],{"type":27,"value":53},"download link for wget",{"type":27,"value":55},".",{"type":22,"tag":23,"props":57,"children":58},{},[59],{"type":27,"value":60},"you can install it like this:",{"type":22,"tag":62,"props":63,"children":67},"pre",{"className":64,"code":65,"language":66,"meta":7,"style":7},"language-bash shiki shiki-themes github-dark github-dark monokai","wget https://gist.githubusercontent.com/bhelm/65283c37a0cb585089041214002df4f7/raw/536099a5f969a6888c85e48a487ec19870c596a2/arch-chroot.sh\nchmod +x arch-chroot.sh\n./arch-chroot.sh -h\n","bash",[68],{"type":22,"tag":69,"props":70,"children":71},"code",{"__ignoreMap":7},[72,90,109],{"type":22,"tag":73,"props":74,"children":77},"span",{"class":75,"line":76},"line",1,[78,84],{"type":22,"tag":73,"props":79,"children":81},{"style":80},"--shiki-default:#B392F0;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E",[82],{"type":27,"value":83},"wget",{"type":22,"tag":73,"props":85,"children":87},{"style":86},"--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74",[88],{"type":27,"value":89}," https://gist.githubusercontent.com/bhelm/65283c37a0cb585089041214002df4f7/raw/536099a5f969a6888c85e48a487ec19870c596a2/arch-chroot.sh\n",{"type":22,"tag":73,"props":91,"children":93},{"class":75,"line":92},2,[94,99,104],{"type":22,"tag":73,"props":95,"children":96},{"style":80},[97],{"type":27,"value":98},"chmod",{"type":22,"tag":73,"props":100,"children":101},{"style":86},[102],{"type":27,"value":103}," +x",{"type":22,"tag":73,"props":105,"children":106},{"style":86},[107],{"type":27,"value":108}," arch-chroot.sh\n",{"type":22,"tag":73,"props":110,"children":112},{"class":75,"line":111},3,[113,118],{"type":22,"tag":73,"props":114,"children":115},{"style":80},[116],{"type":27,"value":117},"./arch-chroot.sh",{"type":22,"tag":73,"props":119,"children":121},{"style":120},"--shiki-default:#79B8FF;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF",[122],{"type":27,"value":123}," -h\n",{"type":22,"tag":23,"props":125,"children":126},{},[127],{"type":27,"value":128},"Using this script, I was able to install grub without getting errors like:",{"type":22,"tag":62,"props":130,"children":132},{"className":64,"code":131,"language":66,"meta":7,"style":7},"grub-install: error: cannot find a device for /boot/grub (is /dev mounted?).\ngrub-probe: error: cannot find a device for / (is /dev mounted?).\n",[133],{"type":22,"tag":69,"props":134,"children":135},{"__ignoreMap":7},[136,200],{"type":22,"tag":73,"props":137,"children":138},{"class":75,"line":76},[139,144,149,154,159,164,169,174,179,185,190,195],{"type":22,"tag":73,"props":140,"children":141},{"style":80},[142],{"type":27,"value":143},"grub-install:",{"type":22,"tag":73,"props":145,"children":146},{"style":86},[147],{"type":27,"value":148}," error:",{"type":22,"tag":73,"props":150,"children":151},{"style":86},[152],{"type":27,"value":153}," cannot",{"type":22,"tag":73,"props":155,"children":156},{"style":86},[157],{"type":27,"value":158}," find",{"type":22,"tag":73,"props":160,"children":161},{"style":86},[162],{"type":27,"value":163}," a",{"type":22,"tag":73,"props":165,"children":166},{"style":86},[167],{"type":27,"value":168}," device",{"type":22,"tag":73,"props":170,"children":171},{"style":86},[172],{"type":27,"value":173}," for",{"type":22,"tag":73,"props":175,"children":176},{"style":86},[177],{"type":27,"value":178}," /boot/grub",{"type":22,"tag":73,"props":180,"children":182},{"style":181},"--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2",[183],{"type":27,"value":184}," (is ",{"type":22,"tag":73,"props":186,"children":187},{"style":86},[188],{"type":27,"value":189},"/dev",{"type":22,"tag":73,"props":191,"children":192},{"style":86},[193],{"type":27,"value":194}," mounted?",{"type":22,"tag":73,"props":196,"children":197},{"style":181},[198],{"type":27,"value":199},").\n",{"type":22,"tag":73,"props":201,"children":202},{"class":75,"line":92},[203,208,212,216,220,224,228,232,237,241,245,249],{"type":22,"tag":73,"props":204,"children":205},{"style":80},[206],{"type":27,"value":207},"grub-probe:",{"type":22,"tag":73,"props":209,"children":210},{"style":86},[211],{"type":27,"value":148},{"type":22,"tag":73,"props":213,"children":214},{"style":86},[215],{"type":27,"value":153},{"type":22,"tag":73,"props":217,"children":218},{"style":86},[219],{"type":27,"value":158},{"type":22,"tag":73,"props":221,"children":222},{"style":86},[223],{"type":27,"value":163},{"type":22,"tag":73,"props":225,"children":226},{"style":86},[227],{"type":27,"value":168},{"type":22,"tag":73,"props":229,"children":230},{"style":86},[231],{"type":27,"value":173},{"type":22,"tag":73,"props":233,"children":234},{"style":86},[235],{"type":27,"value":236}," /",{"type":22,"tag":73,"props":238,"children":239},{"style":181},[240],{"type":27,"value":184},{"type":22,"tag":73,"props":242,"children":243},{"style":86},[244],{"type":27,"value":189},{"type":22,"tag":73,"props":246,"children":247},{"style":86},[248],{"type":27,"value":194},{"type":22,"tag":73,"props":250,"children":251},{"style":181},[252],{"type":27,"value":199},{"type":22,"tag":23,"props":254,"children":255},{},[256],{"type":27,"value":257},"If you are looking for a perfect rescue system, i recommend the archlinux install image; it contains the arch-chroot script, all low level tools needed to format hard drives and even supports mounting of ntfs read-write and accessing samba shares.",{"type":22,"tag":259,"props":260,"children":261},"style",{},[262],{"type":27,"value":263},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}",{"title":7,"searchDepth":92,"depth":92,"links":265},[],"markdown","common:en:blog:7.proper-chroot-in-rescue-mode-using-arch-chroot.md","common","en/blog/7.proper-chroot-in-rescue-mode-using-arch-chroot.md","en/blog/7.proper-chroot-in-rescue-mode-using-arch-chroot","md",{"_path":273,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":274,"description":275,"author":10,"image":276,"releaseDate":277,"blogCategories":278,"articleTags":279,"tags":281,"_type":266,"_id":282,"_source":268,"_file":283,"_stem":284,"_extension":271},"/en/blog/why-we-dont-use-samsung-nvme-pro-ssds-anymore","Why we dont use Samsung NVME Pro SSDs anymore","When it comes to buying an NVME SSD for a software developer workstation, you have a choice: buy a cheap one or an expensive one. So far I've gone for the more expensive ones because they promised better performance and longer life - now I see how wrong I was...","/blog/thumbnails/SSD_white.png","2020-04-16",[14,15],[280],"SSD",[17],"common:en:blog:6.why-we-dont-use-samsung-nvme-pro-ssds-anymore.md","en/blog/6.why-we-dont-use-samsung-nvme-pro-ssds-anymore.md","en/blog/6.why-we-dont-use-samsung-nvme-pro-ssds-anymore",{"_path":286,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":287,"description":288,"author":10,"image":289,"releaseDate":290,"blogCategories":291,"tags":292,"_type":266,"_id":293,"_source":268,"_file":294,"_stem":295,"_extension":271},"/en/blog/btrfs-finding-and-fixing-highly-fragmented-files","BTRFS: Finding and fixing highly fragmented files","Most of the best BTRFS features are powered by the copy-on-write technology. If an application wants to rewrite a part of a file, like the first MB, the Data is not written in-place but in an so-called extend. This enables BTRFS to keep multiple versions of partially rewritten files with only claiming ...","/blog/thumbnails/BTRFS_white.png","2020-10-21",[14,15],[17],"common:en:blog:8.btrfs-finding-and-fixing-highly-fragmented-files.md","en/blog/8.btrfs-finding-and-fixing-highly-fragmented-files.md","en/blog/8.btrfs-finding-and-fixing-highly-fragmented-files",{"_path":297},"/blog/richtiges-chroot-im-rettungsmodues-mit-arch-chroot",{"_path":4},{"_path":300,"_dir":301,"_draft":6,"_partial":6,"_locale":7,"slug":10,"teams":302,"primaryTeam":304,"firstName":305,"lastName":306,"prefixTitle":7,"suffixTitle":7,"education":307,"executiveRole":312,"role":313,"workingSince":321,"inTheCompanySince":322,"techSkills":323,"skills":368,"projects":381,"contactDetails":394,"_image":398,"image":399,"_id":400,"_type":401,"title":402,"_source":301,"_file":403,"_stem":404,"_extension":401},"/employees/bernd-helm","employees",[303,304],"ai","devOps","Bernd","Helm",[308],[309,310,311],"B. Sc. Angewandte Informatik","FHDW Dresden","2010","CTO",[314,315,304,316,317,318,319,320],"founder","chiefTechnologyOfficer","databaseSpecialist","admin","softwareDeveloper","backendDeveloper","consultant","2005","2008",[324,328,330,332,335,337,340,342,344,346,349,353,356,359,362,365],{"name":325,"level":326,"icon":327},"Docker","expert","/images/Docker.svg",{"name":329,"level":326,"icon":11},"Linux",{"name":331,"level":326},"Zabbix",{"name":333,"level":326,"icon":334},"MariaDB ColumnStore","/images/maria-db-logo.svg",{"name":336,"level":326},"OpenAI",{"name":338,"level":326,"icon":339},"Pytorch","/images/PyTorch.svg",{"name":341,"level":326},"PHP",{"name":343,"level":326},"Java",{"name":345,"level":326},"Python",{"name":347,"level":326,"icon":348},"SQL","/images/SQL.svg",{"name":350,"level":351,"icon":352},"C++","advanced","/images/cpp-logo.svg",{"name":354,"level":351,"icon":355},"C#","/images/csharp.svg",{"name":357,"level":351,"icon":358},"CSS","/images/css.svg",{"name":360,"level":351,"icon":361},"HTML","/images/html.svg",{"name":363,"level":351,"icon":364},"OpenCV","/images/OpenCV.svg",{"name":366,"level":351,"icon":367},"Vue.js","/images/vuejs.svg",[369,371,373,375,377,379],{"name":370,"level":326},"artificialIntelligence",{"name":372,"level":326},"codingGuidelines",{"name":374,"level":326},"databases",{"name":376,"level":326},"linuxServerAdministration",{"name":378,"level":326},"softwareArchitect",{"name":380,"level":351},"qualityAssurance",[382,385,387,389,392],{"project":383,"position":384},"Gridside","Technical Consultant",{"project":386,"position":384},"Herole",{"project":388,"position":384},"Montagespezis",{"project":390,"position":391},"Orsee","Technical Manager",{"project":393,"position":384},"Vipr",{"eMail":395,"phone":396,"visibility":397},"bernd.helm@helmundwalter.de","+49 351 799 035 20","1","images/employees/Portraits/bernd_helm.webp","images/employees/Portraits/BerndHelm_MS.webp","employees:employees:1.bernd-helm.json","json","Bernd Helm","employees/1.bernd-helm.json","employees/1.bernd-helm",{"_path":273,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":274,"description":275,"author":10,"image":276,"releaseDate":277,"blogCategories":406,"articleTags":407,"tags":408,"body":409,"_type":266,"_id":282,"_source":268,"_file":283,"_stem":284,"_extension":271},[14,15],[280],[17],{"type":19,"children":410,"toc":921},[411,418,423,428,811,816,821,830,835,917],{"type":22,"tag":412,"props":413,"children":415},"h2",{"id":414},"investigation-in-performance",[416],{"type":27,"value":417},"Investigation in Performance",{"type":22,"tag":23,"props":419,"children":420},{},[421],{"type":27,"value":422},"When it comes to buying an NVME SSD for a software developer workstation, you are faced with a choice: buy one cheap or buy one expensive. So far, I've chosen the more expensive ones because they promised better performance and longer life - I can now see how wrong I was.",{"type":22,"tag":23,"props":424,"children":425},{},[426],{"type":27,"value":427},"It all started when one employee said his NVME SSD was slower than his Sata SSD. This can't be true, as the Sata SSD is limited to 600MB/s and 3 years old, while his new NVME SSD is supposed to read and write 3000MB/s. And yet it is true. I have done some dirty benchmarks and the results are impressive. I call the benchmark dirty because clearly different PCs are used; different CPUs, sightly different operating system versions, different MySQL versions and configurations. But the differences in the results cannot be explained my that in my opinion. There is something wrong with the Samsung NVME SSDs.",{"type":22,"tag":429,"props":430,"children":431},"table",{},[432,470],{"type":22,"tag":433,"props":434,"children":435},"thead",{},[436],{"type":22,"tag":437,"props":438,"children":439},"tr",{},[440,446,450,455,460,465],{"type":22,"tag":441,"props":442,"children":443},"th",{},[444],{"type":27,"value":445},"User",{"type":22,"tag":441,"props":447,"children":448},{},[449],{"type":27,"value":280},{"type":22,"tag":441,"props":451,"children":452},{},[453],{"type":27,"value":454},"Note",{"type":22,"tag":441,"props":456,"children":457},{},[458],{"type":27,"value":459},"Allocation",{"type":22,"tag":441,"props":461,"children":462},{},[463],{"type":27,"value":464},"TPS",{"type":22,"tag":441,"props":466,"children":467},{},[468],{"type":27,"value":469},"QPS",{"type":22,"tag":471,"props":472,"children":473},"tbody",{},[474,506,536,567,596,627,659,690,722,752,782],{"type":22,"tag":437,"props":475,"children":476},{},[477,483,488,491,496,501],{"type":22,"tag":478,"props":479,"children":480},"td",{},[481],{"type":27,"value":482},"Markus",{"type":22,"tag":478,"props":484,"children":485},{},[486],{"type":27,"value":487},"Curical CT1000P1SSD8",{"type":22,"tag":478,"props":489,"children":490},{},[],{"type":22,"tag":478,"props":492,"children":493},{},[494],{"type":27,"value":495},"1,00 %",{"type":22,"tag":478,"props":497,"children":498},{},[499],{"type":27,"value":500},"304",{"type":22,"tag":478,"props":502,"children":503},{},[504],{"type":27,"value":505},"6091",{"type":22,"tag":437,"props":507,"children":508},{},[509,514,518,521,526,531],{"type":22,"tag":478,"props":510,"children":511},{},[512],{"type":27,"value":513},"Robert",{"type":22,"tag":478,"props":515,"children":516},{},[517],{"type":27,"value":487},{"type":22,"tag":478,"props":519,"children":520},{},[],{"type":22,"tag":478,"props":522,"children":523},{},[524],{"type":27,"value":525},"4,00 %",{"type":22,"tag":478,"props":527,"children":528},{},[529],{"type":27,"value":530},"412",{"type":22,"tag":478,"props":532,"children":533},{},[534],{"type":27,"value":535},"8241",{"type":22,"tag":437,"props":537,"children":538},{},[539,544,549,552,557,562],{"type":22,"tag":478,"props":540,"children":541},{},[542],{"type":27,"value":543},"Reiner",{"type":22,"tag":478,"props":545,"children":546},{},[547],{"type":27,"value":548},"Samsung SSD 970 PRO 512GB",{"type":22,"tag":478,"props":550,"children":551},{},[],{"type":22,"tag":478,"props":553,"children":554},{},[555],{"type":27,"value":556},"66,00 %",{"type":22,"tag":478,"props":558,"children":559},{},[560],{"type":27,"value":561},"160",{"type":22,"tag":478,"props":563,"children":564},{},[565],{"type":27,"value":566},"3214",{"type":22,"tag":437,"props":568,"children":569},{},[570,574,578,581,586,591],{"type":22,"tag":478,"props":571,"children":572},{},[573],{"type":27,"value":482},{"type":22,"tag":478,"props":575,"children":576},{},[577],{"type":27,"value":548},{"type":22,"tag":478,"props":579,"children":580},{},[],{"type":22,"tag":478,"props":582,"children":583},{},[584],{"type":27,"value":585},"14,00 %",{"type":22,"tag":478,"props":587,"children":588},{},[589],{"type":27,"value":590},"120",{"type":22,"tag":478,"props":592,"children":593},{},[594],{"type":27,"value":595},"2414",{"type":22,"tag":437,"props":597,"children":598},{},[599,603,607,612,617,622],{"type":22,"tag":478,"props":600,"children":601},{},[602],{"type":27,"value":305},{"type":22,"tag":478,"props":604,"children":605},{},[606],{"type":27,"value":548},{"type":22,"tag":478,"props":608,"children":609},{},[610],{"type":27,"value":611},"crypt",{"type":22,"tag":478,"props":613,"children":614},{},[615],{"type":27,"value":616},"80,00 %",{"type":22,"tag":478,"props":618,"children":619},{},[620],{"type":27,"value":621},"148",{"type":22,"tag":478,"props":623,"children":624},{},[625],{"type":27,"value":626},"2976",{"type":22,"tag":437,"props":628,"children":629},{},[630,635,640,644,649,654],{"type":22,"tag":478,"props":631,"children":632},{},[633],{"type":27,"value":634},"Daniel",{"type":22,"tag":478,"props":636,"children":637},{},[638],{"type":27,"value":639},"Samsung SSD 960 PRO 512GB",{"type":22,"tag":478,"props":641,"children":642},{},[643],{"type":27,"value":611},{"type":22,"tag":478,"props":645,"children":646},{},[647],{"type":27,"value":648},"46,00 %",{"type":22,"tag":478,"props":650,"children":651},{},[652],{"type":27,"value":653},"30",{"type":22,"tag":478,"props":655,"children":656},{},[657],{"type":27,"value":658},"614",{"type":22,"tag":437,"props":660,"children":661},{},[662,666,671,676,681,685],{"type":22,"tag":478,"props":663,"children":664},{},[665],{"type":27,"value":543},{"type":22,"tag":478,"props":667,"children":668},{},[669],{"type":27,"value":670},"Samsung SSD 850 PRO 128GB",{"type":22,"tag":478,"props":672,"children":673},{},[674],{"type":27,"value":675},"sata",{"type":22,"tag":478,"props":677,"children":678},{},[679],{"type":27,"value":680},"37,00 %",{"type":22,"tag":478,"props":682,"children":683},{},[684],{"type":27,"value":590},{"type":22,"tag":478,"props":686,"children":687},{},[688],{"type":27,"value":689},"2437",{"type":22,"tag":437,"props":691,"children":692},{},[693,697,702,707,712,717],{"type":22,"tag":478,"props":694,"children":695},{},[696],{"type":27,"value":634},{"type":22,"tag":478,"props":698,"children":699},{},[700],{"type":27,"value":701},"Samsung SSD 860 PRO 512GB",{"type":22,"tag":478,"props":703,"children":704},{},[705],{"type":27,"value":706},"SATA",{"type":22,"tag":478,"props":708,"children":709},{},[710],{"type":27,"value":711},"87,00 %",{"type":22,"tag":478,"props":713,"children":714},{},[715],{"type":27,"value":716},"185",{"type":22,"tag":478,"props":718,"children":719},{},[720],{"type":27,"value":721},"3700",{"type":22,"tag":437,"props":723,"children":724},{},[725,730,735,738,742,747],{"type":22,"tag":478,"props":726,"children":727},{},[728],{"type":27,"value":729},"Daneil",{"type":22,"tag":478,"props":731,"children":732},{},[733],{"type":27,"value":734},"Samsung SSD 970 EVO Plus 1TB",{"type":22,"tag":478,"props":736,"children":737},{},[],{"type":22,"tag":478,"props":739,"children":740},{},[741],{"type":27,"value":495},{"type":22,"tag":478,"props":743,"children":744},{},[745],{"type":27,"value":746},"480",{"type":22,"tag":478,"props":748,"children":749},{},[750],{"type":27,"value":751},"9614",{"type":22,"tag":437,"props":753,"children":754},{},[755,759,764,767,772,777],{"type":22,"tag":478,"props":756,"children":757},{},[758],{"type":27,"value":305},{"type":22,"tag":478,"props":760,"children":761},{},[762],{"type":27,"value":763},"Sabrent Rocket Q 2TB",{"type":22,"tag":478,"props":765,"children":766},{},[],{"type":22,"tag":478,"props":768,"children":769},{},[770],{"type":27,"value":771},"26,00 %",{"type":22,"tag":478,"props":773,"children":774},{},[775],{"type":27,"value":776},"237",{"type":22,"tag":478,"props":778,"children":779},{},[780],{"type":27,"value":781},"4749",{"type":22,"tag":437,"props":783,"children":784},{},[785,790,795,798,802,806],{"type":22,"tag":478,"props":786,"children":787},{},[788],{"type":27,"value":789},"Marcel",{"type":22,"tag":478,"props":791,"children":792},{},[793],{"type":27,"value":794},"Patriot Scorch M2 256GB",{"type":22,"tag":478,"props":796,"children":797},{},[],{"type":22,"tag":478,"props":799,"children":800},{},[801],{"type":27,"value":495},{"type":22,"tag":478,"props":803,"children":804},{},[805],{"type":27,"value":590},{"type":22,"tag":478,"props":807,"children":808},{},[809],{"type":27,"value":810},"2440",{"type":22,"tag":23,"props":812,"children":813},{},[814],{"type":27,"value":815},"As you can see, the Curical P1 SSD is 2x, partially 3x faster than the Samsung Pro SSDs - even though the Curical costs only a third. You can also see that the 860 Pro Sata SSD from Daniel is faster than all Samsung NVME Pro SSDs. If you look for the phenomena on google, you will find other people who have observed the same problem. The Samsung PRO NVME SSDs seem to have a problem with frequent fsync calls.I have used sysbench 1.0.18 with the oltp_read_write benchmark on all machines. They all use BTRFS as filesystem and the MySQL filesystem was mounted with nodatacow, which improves performance. In the table, TPS stands for transactions per second and QPS for queries per second - both values were read from the sysbench statistics.",{"type":22,"tag":23,"props":817,"children":818},{},[819],{"type":27,"value":820},"Since our database performance is very important to our software developers, I will avoid the Samsung pro NVME SSDs in the future and give other manufacturers a chance. The SSD is still fine for Gaming, Movie editing and stuff, just not for requent fsyncs.",{"type":22,"tag":23,"props":822,"children":823},{},[824],{"type":22,"tag":825,"props":826,"children":827},"strong",{},[828],{"type":27,"value":829},"Edit: looks like the 970 EVO Plus SSD is not affected by this problem.",{"type":22,"tag":23,"props":831,"children":832},{},[833],{"type":27,"value":834},"sysbench commands used:",{"type":22,"tag":62,"props":836,"children":838},{"className":64,"code":837,"language":66,"meta":7,"style":7},"sysbench oltp_read_write --table-size=2500000 --mysql-user=root --db-driver=mysql --mysql-password=  prepare\nsysbench oltp_read_write --table-size=2500000 --mysql-user=root --db-driver=mysql --mysql-password=  --time=120 run\n",[839],{"type":22,"tag":69,"props":840,"children":841},{"__ignoreMap":7},[842,880],{"type":22,"tag":73,"props":843,"children":844},{"class":75,"line":76},[845,850,855,860,865,870,875],{"type":22,"tag":73,"props":846,"children":847},{"style":80},[848],{"type":27,"value":849},"sysbench",{"type":22,"tag":73,"props":851,"children":852},{"style":86},[853],{"type":27,"value":854}," oltp_read_write",{"type":22,"tag":73,"props":856,"children":857},{"style":120},[858],{"type":27,"value":859}," --table-size=2500000",{"type":22,"tag":73,"props":861,"children":862},{"style":120},[863],{"type":27,"value":864}," --mysql-user=root",{"type":22,"tag":73,"props":866,"children":867},{"style":120},[868],{"type":27,"value":869}," --db-driver=mysql",{"type":22,"tag":73,"props":871,"children":872},{"style":120},[873],{"type":27,"value":874}," --mysql-password=",{"type":22,"tag":73,"props":876,"children":877},{"style":86},[878],{"type":27,"value":879},"  prepare\n",{"type":22,"tag":73,"props":881,"children":882},{"class":75,"line":92},[883,887,891,895,899,903,907,912],{"type":22,"tag":73,"props":884,"children":885},{"style":80},[886],{"type":27,"value":849},{"type":22,"tag":73,"props":888,"children":889},{"style":86},[890],{"type":27,"value":854},{"type":22,"tag":73,"props":892,"children":893},{"style":120},[894],{"type":27,"value":859},{"type":22,"tag":73,"props":896,"children":897},{"style":120},[898],{"type":27,"value":864},{"type":22,"tag":73,"props":900,"children":901},{"style":120},[902],{"type":27,"value":869},{"type":22,"tag":73,"props":904,"children":905},{"style":120},[906],{"type":27,"value":874},{"type":22,"tag":73,"props":908,"children":909},{"style":120},[910],{"type":27,"value":911},"  --time=120",{"type":22,"tag":73,"props":913,"children":914},{"style":86},[915],{"type":27,"value":916}," run\n",{"type":22,"tag":259,"props":918,"children":919},{},[920],{"type":27,"value":263},{"title":7,"searchDepth":92,"depth":92,"links":922},[923],{"id":414,"depth":92,"text":417},{"_path":286,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":287,"description":288,"author":10,"image":289,"releaseDate":290,"blogCategories":925,"tags":926,"body":927,"_type":266,"_id":293,"_source":268,"_file":294,"_stem":295,"_extension":271},[14,15],[17],{"type":19,"children":928,"toc":1387},[929,935,948,954,959,965,970,1010,1016,1021,1027,1039,1157,1175,1181,1337,1342,1348,1377,1383],{"type":22,"tag":412,"props":930,"children":932},{"id":931},"what-is-btrfs-fragmentation",[933],{"type":27,"value":934},"What is BTRFS fragmentation?",{"type":22,"tag":23,"props":936,"children":937},{},[938,940,946],{"type":27,"value":939},"Most of the best BTRFS features are powered by the ",{"type":22,"tag":941,"props":942,"children":943},"em",{},[944],{"type":27,"value":945},"copy-on-write technology",{"type":27,"value":947},". If a application wants to rewrite a part of a file, like the first megabyte, the data is not written in-place but in an so-called extend. This enables BTRFS to keep multiple versions of partially rewritten files with only claiming disk space assigned to the changes and not multiple full copies of a file. The old data can be discarded at some point (i.e. if its not used by any snapshots anymore) and the extend will serve the files current version.",{"type":22,"tag":412,"props":949,"children":951},{"id":950},"btrfs-fragmentation-can-hurt-the-performance-of-your-system",[952],{"type":27,"value":953},"BTRFS fragmentation can hurt the performance of your System",{"type":22,"tag":23,"props":955,"children":956},{},[957],{"type":27,"value":958},"You can guess, reading a file with 100k+ extends and adding more extends requires a lot of bookkeeping and storage seeks from your system. That 10GB file there is internally shattered into 100k parts that need to be collected if you want to read the whole file. This clearly adds complexity - and decreases performance.",{"type":22,"tag":412,"props":960,"children":962},{"id":961},"btrfs-fragmentation-can-block-huge-amounts-of-disk-space",[963],{"type":27,"value":964},"BTRFS fragmentation can block huge amounts of disk space",{"type":22,"tag":23,"props":966,"children":967},{},[968],{"type":27,"value":969},"Yes, BTRFS has to store the locations of these 100k extends somewhere, easily adding some extra GB of used disk space to your system. The bad thing is that BTRFS does not tell you that",{"type":22,"tag":23,"props":971,"children":972},{},[973,975,980,982,987,989,994,996,1001,1003,1008],{"type":27,"value":974},"If you see your btrfs filesystem using ",{"type":22,"tag":825,"props":976,"children":977},{},[978],{"type":27,"value":979},"80GB",{"type":27,"value":981}," in ",{"type":22,"tag":941,"props":983,"children":984},{},[985],{"type":27,"value":986},"df",{"type":27,"value":988}," and ",{"type":22,"tag":941,"props":990,"children":991},{},[992],{"type":27,"value":993},"btrfs fi show",{"type":27,"value":995}," while ",{"type":22,"tag":941,"props":997,"children":998},{},[999],{"type":27,"value":1000},"du -hsx",{"type":27,"value":1002}," only shows ",{"type":22,"tag":825,"props":1004,"children":1005},{},[1006],{"type":27,"value":1007},"54GB",{"type":27,"value":1009}," there are only two reasons i am aware of to cause this: either you have snapshots that keep old extends - or you have massive fragmentation.",{"type":22,"tag":412,"props":1011,"children":1013},{"id":1012},"btrfs-filesystem-defrag",[1014],{"type":27,"value":1015},"BTRFS filesystem defrag",{"type":22,"tag":23,"props":1017,"children":1018},{},[1019],{"type":27,"value":1020},"It is possible to use BTRFS filesystem defrag on your whole file system, but that causes all you snapshots to duplicate the data. it also causes a lot of IO so this is nothing you want to do on your production server without a reason. There is really no point in defrag'ing static files that are almost never changed.",{"type":22,"tag":412,"props":1022,"children":1024},{"id":1023},"find-the-most-fragmented-files-on-your-system",[1025],{"type":27,"value":1026},"Find the most fragmented files on your System",{"type":22,"tag":23,"props":1028,"children":1029},{},[1030,1032,1037],{"type":27,"value":1031},"There is a linux-tool called ",{"type":22,"tag":941,"props":1033,"children":1034},{},[1035],{"type":27,"value":1036},"filefrag",{"type":27,"value":1038}," which reports how many fragments a file consists of. So i thought ... „why not try to find the most fragmented files and fix just these?“ here you go:",{"type":22,"tag":62,"props":1040,"children":1042},{"className":64,"code":1041,"language":66,"meta":7,"style":7},"find / -xdev -type f| xargs filefrag 2>/dev/null | sed 's/^\\(.*\\): \\([0-9]\\+\\) extent.*/\\2 \\1/' | awk -F ' ' '$1 > 500' | sort -n -r\n",[1043],{"type":22,"tag":69,"props":1044,"children":1045},{"__ignoreMap":7},[1046],{"type":22,"tag":73,"props":1047,"children":1048},{"class":75,"line":76},[1049,1054,1058,1063,1068,1073,1079,1084,1089,1094,1099,1104,1109,1114,1118,1123,1128,1133,1138,1142,1147,1152],{"type":22,"tag":73,"props":1050,"children":1051},{"style":80},[1052],{"type":27,"value":1053},"find",{"type":22,"tag":73,"props":1055,"children":1056},{"style":86},[1057],{"type":27,"value":236},{"type":22,"tag":73,"props":1059,"children":1060},{"style":120},[1061],{"type":27,"value":1062}," -xdev",{"type":22,"tag":73,"props":1064,"children":1065},{"style":120},[1066],{"type":27,"value":1067}," -type",{"type":22,"tag":73,"props":1069,"children":1070},{"style":86},[1071],{"type":27,"value":1072}," f",{"type":22,"tag":73,"props":1074,"children":1076},{"style":1075},"--shiki-default:#F97583;--shiki-dark:#F97583;--shiki-sepia:#F92672",[1077],{"type":27,"value":1078},"|",{"type":22,"tag":73,"props":1080,"children":1081},{"style":80},[1082],{"type":27,"value":1083}," xargs",{"type":22,"tag":73,"props":1085,"children":1086},{"style":86},[1087],{"type":27,"value":1088}," filefrag",{"type":22,"tag":73,"props":1090,"children":1091},{"style":1075},[1092],{"type":27,"value":1093}," 2>",{"type":22,"tag":73,"props":1095,"children":1096},{"style":86},[1097],{"type":27,"value":1098},"/dev/null",{"type":22,"tag":73,"props":1100,"children":1101},{"style":1075},[1102],{"type":27,"value":1103}," |",{"type":22,"tag":73,"props":1105,"children":1106},{"style":80},[1107],{"type":27,"value":1108}," sed",{"type":22,"tag":73,"props":1110,"children":1111},{"style":86},[1112],{"type":27,"value":1113}," 's/^\\(.*\\): \\([0-9]\\+\\) extent.*/\\2 \\1/'",{"type":22,"tag":73,"props":1115,"children":1116},{"style":1075},[1117],{"type":27,"value":1103},{"type":22,"tag":73,"props":1119,"children":1120},{"style":80},[1121],{"type":27,"value":1122}," awk",{"type":22,"tag":73,"props":1124,"children":1125},{"style":120},[1126],{"type":27,"value":1127}," -F",{"type":22,"tag":73,"props":1129,"children":1130},{"style":86},[1131],{"type":27,"value":1132}," ' '",{"type":22,"tag":73,"props":1134,"children":1135},{"style":86},[1136],{"type":27,"value":1137}," '$1 > 500'",{"type":22,"tag":73,"props":1139,"children":1140},{"style":1075},[1141],{"type":27,"value":1103},{"type":22,"tag":73,"props":1143,"children":1144},{"style":80},[1145],{"type":27,"value":1146}," sort",{"type":22,"tag":73,"props":1148,"children":1149},{"style":120},[1150],{"type":27,"value":1151}," -n",{"type":22,"tag":73,"props":1153,"children":1154},{"style":120},[1155],{"type":27,"value":1156}," -r\n",{"type":22,"tag":23,"props":1158,"children":1159},{},[1160,1162,1167,1169,1173],{"type":27,"value":1161},"You should review this list. If there is something with 10k+ extends, it is a candidate to be flagged as ",{"type":22,"tag":941,"props":1163,"children":1164},{},[1165],{"type":27,"value":1166},"nodatacow",{"type":27,"value":1168},". In my case, I have discovered that the fail2ban sqlite database was using 170k extends which is a lot! If you have database-files with a high fragmentation while using ",{"type":22,"tag":941,"props":1170,"children":1171},{},[1172],{"type":27,"value":1166},{"type":27,"value":1174},", it is better to run a \"optimize table\" on them, as this also cleans up the database-related fragmentation of frequently rewritten tables. If you use snapshots, make sure to have some free space, as the defrag does an in-place copy of the files while snapshots are blocking the old version from being released.",{"type":22,"tag":412,"props":1176,"children":1178},{"id":1177},"if-everything-is-fine-you-can-go-ahead-and-defrag-all-files-on-that-list",[1179],{"type":27,"value":1180},"If everything is fine, you can go ahead and defrag all files on that list",{"type":22,"tag":62,"props":1182,"children":1184},{"className":64,"code":1183,"language":66,"meta":7,"style":7},"find / -xdev -type f| xargs filefrag 2>/dev/null | sed 's/^\\(.*\\): \\([0-9]\\+\\) extent.*/\\2 \\1/' |\nawk -F ' ' '$1 > 500' | cut -d ' ' -f2 2>/dev/null | xargs -r btrfs fi defrag -f -v\n",[1185],{"type":22,"tag":69,"props":1186,"children":1187},{"__ignoreMap":7},[1188,1248],{"type":22,"tag":73,"props":1189,"children":1190},{"class":75,"line":76},[1191,1195,1199,1203,1207,1211,1215,1219,1223,1227,1231,1235,1239,1243],{"type":22,"tag":73,"props":1192,"children":1193},{"style":80},[1194],{"type":27,"value":1053},{"type":22,"tag":73,"props":1196,"children":1197},{"style":86},[1198],{"type":27,"value":236},{"type":22,"tag":73,"props":1200,"children":1201},{"style":120},[1202],{"type":27,"value":1062},{"type":22,"tag":73,"props":1204,"children":1205},{"style":120},[1206],{"type":27,"value":1067},{"type":22,"tag":73,"props":1208,"children":1209},{"style":86},[1210],{"type":27,"value":1072},{"type":22,"tag":73,"props":1212,"children":1213},{"style":1075},[1214],{"type":27,"value":1078},{"type":22,"tag":73,"props":1216,"children":1217},{"style":80},[1218],{"type":27,"value":1083},{"type":22,"tag":73,"props":1220,"children":1221},{"style":86},[1222],{"type":27,"value":1088},{"type":22,"tag":73,"props":1224,"children":1225},{"style":1075},[1226],{"type":27,"value":1093},{"type":22,"tag":73,"props":1228,"children":1229},{"style":86},[1230],{"type":27,"value":1098},{"type":22,"tag":73,"props":1232,"children":1233},{"style":1075},[1234],{"type":27,"value":1103},{"type":22,"tag":73,"props":1236,"children":1237},{"style":80},[1238],{"type":27,"value":1108},{"type":22,"tag":73,"props":1240,"children":1241},{"style":86},[1242],{"type":27,"value":1113},{"type":22,"tag":73,"props":1244,"children":1245},{"style":1075},[1246],{"type":27,"value":1247}," |\n",{"type":22,"tag":73,"props":1249,"children":1250},{"class":75,"line":92},[1251,1256,1260,1264,1268,1272,1277,1282,1286,1291,1295,1299,1303,1307,1312,1317,1322,1327,1332],{"type":22,"tag":73,"props":1252,"children":1253},{"style":80},[1254],{"type":27,"value":1255},"awk",{"type":22,"tag":73,"props":1257,"children":1258},{"style":120},[1259],{"type":27,"value":1127},{"type":22,"tag":73,"props":1261,"children":1262},{"style":86},[1263],{"type":27,"value":1132},{"type":22,"tag":73,"props":1265,"children":1266},{"style":86},[1267],{"type":27,"value":1137},{"type":22,"tag":73,"props":1269,"children":1270},{"style":1075},[1271],{"type":27,"value":1103},{"type":22,"tag":73,"props":1273,"children":1274},{"style":80},[1275],{"type":27,"value":1276}," cut",{"type":22,"tag":73,"props":1278,"children":1279},{"style":120},[1280],{"type":27,"value":1281}," -d",{"type":22,"tag":73,"props":1283,"children":1284},{"style":86},[1285],{"type":27,"value":1132},{"type":22,"tag":73,"props":1287,"children":1288},{"style":120},[1289],{"type":27,"value":1290}," -f2",{"type":22,"tag":73,"props":1292,"children":1293},{"style":1075},[1294],{"type":27,"value":1093},{"type":22,"tag":73,"props":1296,"children":1297},{"style":86},[1298],{"type":27,"value":1098},{"type":22,"tag":73,"props":1300,"children":1301},{"style":1075},[1302],{"type":27,"value":1103},{"type":22,"tag":73,"props":1304,"children":1305},{"style":80},[1306],{"type":27,"value":1083},{"type":22,"tag":73,"props":1308,"children":1309},{"style":120},[1310],{"type":27,"value":1311}," -r",{"type":22,"tag":73,"props":1313,"children":1314},{"style":86},[1315],{"type":27,"value":1316}," btrfs",{"type":22,"tag":73,"props":1318,"children":1319},{"style":86},[1320],{"type":27,"value":1321}," fi",{"type":22,"tag":73,"props":1323,"children":1324},{"style":86},[1325],{"type":27,"value":1326}," defrag",{"type":22,"tag":73,"props":1328,"children":1329},{"style":120},[1330],{"type":27,"value":1331}," -f",{"type":22,"tag":73,"props":1333,"children":1334},{"style":120},[1335],{"type":27,"value":1336}," -v\n",{"type":22,"tag":23,"props":1338,"children":1339},{},[1340],{"type":27,"value":1341},"This will print out all filenames that are processed.",{"type":22,"tag":412,"props":1343,"children":1345},{"id":1344},"a-short-explanation-of-the-command",[1346],{"type":27,"value":1347},"A short explanation of the command",{"type":22,"tag":23,"props":1349,"children":1350},{},[1351,1355,1357,1361,1363,1368,1370,1375],{"type":22,"tag":941,"props":1352,"children":1353},{},[1354],{"type":27,"value":1053},{"type":27,"value":1356}," gets all files on the specified path (/) without descending into other mounted filesystems (-xdev). Then ",{"type":22,"tag":941,"props":1358,"children":1359},{},[1360],{"type":27,"value":1036},{"type":27,"value":1362}," determines the fragmentation, the ",{"type":22,"tag":941,"props":1364,"children":1365},{},[1366],{"type":27,"value":1367},"sed",{"type":27,"value":1369}," command reformats the output so that the extent count is on first position followed by the filename. Then awk parses that list filtering only files that have more than 500 extends. After that is done, the output is „cut“ to only contain the filenames and passed to btrfs defrag for defragmentation. -v on the ",{"type":22,"tag":941,"props":1371,"children":1372},{},[1373],{"type":27,"value":1374},"defrag",{"type":27,"value":1376}," command prints out all processed files. Also take a look on the longterm IO usage before and after the defrag to see how big the difference in the real world is.",{"type":22,"tag":412,"props":1378,"children":1380},{"id":1379},"have-fun",[1381],{"type":27,"value":1382},"Have fun!",{"type":22,"tag":259,"props":1384,"children":1385},{},[1386],{"type":27,"value":263},{"title":7,"searchDepth":92,"depth":92,"links":1388},[1389,1390,1391,1392,1393,1394,1395,1396],{"id":931,"depth":92,"text":934},{"id":950,"depth":92,"text":953},{"id":961,"depth":92,"text":964},{"id":1012,"depth":92,"text":1015},{"id":1023,"depth":92,"text":1026},{"id":1177,"depth":92,"text":1180},{"id":1344,"depth":92,"text":1347},{"id":1379,"depth":92,"text":1382},{"_path":300,"_dir":301,"_draft":6,"_partial":6,"_locale":7,"slug":10,"teams":1398,"primaryTeam":304,"firstName":305,"lastName":306,"prefixTitle":7,"suffixTitle":7,"education":1399,"executiveRole":312,"role":1401,"workingSince":321,"inTheCompanySince":322,"techSkills":1402,"skills":1419,"projects":1426,"contactDetails":1432,"_image":398,"image":399,"_id":400,"_type":401,"title":402,"_source":301,"_file":403,"_stem":404,"_extension":401},[303,304],[1400],[309,310,311],[314,315,304,316,317,318,319,320],[1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418],{"name":325,"level":326,"icon":327},{"name":329,"level":326,"icon":11},{"name":331,"level":326},{"name":333,"level":326,"icon":334},{"name":336,"level":326},{"name":338,"level":326,"icon":339},{"name":341,"level":326},{"name":343,"level":326},{"name":345,"level":326},{"name":347,"level":326,"icon":348},{"name":350,"level":351,"icon":352},{"name":354,"level":351,"icon":355},{"name":357,"level":351,"icon":358},{"name":360,"level":351,"icon":361},{"name":363,"level":351,"icon":364},{"name":366,"level":351,"icon":367},[1420,1421,1422,1423,1424,1425],{"name":370,"level":326},{"name":372,"level":326},{"name":374,"level":326},{"name":376,"level":326},{"name":378,"level":326},{"name":380,"level":351},[1427,1428,1429,1430,1431],{"project":383,"position":384},{"project":386,"position":384},{"project":388,"position":384},{"project":390,"position":391},{"project":393,"position":384},{"eMail":395,"phone":396,"visibility":397},[1434,1449],{"_path":1435,"_dir":1436,"_draft":6,"_partial":1437,"_locale":7,"name":1438,"slug":1436,"text":1439,"hoverText":1440,"image":1441,"customer":1438,"tags":1442,"_id":1444,"_type":1445,"title":1446,"_source":268,"_file":1447,"_stem":1448,"_extension":1445},"/en/portfolio/pixelx/_teaser","pixelx",true,"PixelX","IT Security with Precision and Expertise","For PixelX, we conducted a targeted security analysis where, thanks to our deep technical understanding, we were able to identify a critical SQL injection vulnerability. With minimal time investment, we achieved maximum security gain.","/images/portfolio/pixelx/pixelx_secured.png",[1443,17],"security","common:en:portfolio:9010.pixelx:_teaser.yaml","yaml","Teaser","en/portfolio/9010.pixelx/_teaser.yaml","en/portfolio/9010.pixelx/_teaser",{"_path":1450,"_dir":1451,"_draft":6,"_partial":1437,"_locale":7,"name":1452,"slug":1451,"text":1453,"hoverText":1454,"image":1455,"customer":1452,"tags":1456,"_id":1457,"_type":1445,"title":1446,"_source":268,"_file":1458,"_stem":1459,"_extension":1445},"/en/portfolio/slimspots/_teaser","slimspots","SlimSpots","Processing large amounts of data in real-time","For SlimSpots, a global provider of ad marketing solutions, we developed a highly scalable infrastructure that enables the processing of trillions of data records in real-time.","/images/portfolio/slimspots/slim_spots_prtfolio.png",[374,17],"common:en:portfolio:9020.slimspots:_teaser.yaml","en/portfolio/9020.slimspots/_teaser.yaml","en/portfolio/9020.slimspots/_teaser",1782284053154]