SampleStorageSetup-LVM.html #3

  • //
  • guest/
  • perforce_software/
  • sdp/
  • dev/
  • doc/
  • SampleStorageSetup-LVM.html
  • View
  • Commits
  • Open Download .zip Download (65 KB)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 2.0.23">
<meta name="description" content="Instructions for setting up initial storage using LVM">
<meta name="author" content="Perforce Professional Services">
<title>[DRAFT] Perforce P4D Sample Storage Setup - LVM</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
<style>
/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
/* Uncomment the following line when using as a custom stylesheet */
/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
html{font-family:sans-serif;-webkit-text-size-adjust:100%}
a{background:none}
a:focus{outline:thin dotted}
a:active,a:hover{outline:0}
h1{font-size:2em;margin:.67em 0}
b,strong{font-weight:bold}
abbr{font-size:.9em}
abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
dfn{font-style:italic}
hr{height:0}
mark{background:#ff0;color:#000}
code,kbd,pre,samp{font-family:monospace;font-size:1em}
pre{white-space:pre-wrap}
q{quotes:"\201C" "\201D" "\2018" "\2019"}
small{font-size:80%}
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
sup{top:-.5em}
sub{bottom:-.25em}
img{border:0}
svg:not(:root){overflow:hidden}
figure{margin:0}
audio,video{display:inline-block}
audio:not([controls]){display:none;height:0}
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
legend{border:0;padding:0}
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
button,input{line-height:normal}
button,select{text-transform:none}
button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
button[disabled],html input[disabled]{cursor:default}
input[type=checkbox],input[type=radio]{padding:0}
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
textarea{overflow:auto;vertical-align:top}
table{border-collapse:collapse;border-spacing:0}
*,::before,::after{box-sizing:border-box}
html,body{font-size:100%}
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
a:hover{cursor:pointer}
img,object,embed{max-width:100%;height:auto}
object,embed{height:100%}
img{-ms-interpolation-mode:bicubic}
.left{float:left!important}
.right{float:right!important}
.text-left{text-align:left!important}
.text-right{text-align:right!important}
.text-center{text-align:center!important}
.text-justify{text-align:justify!important}
.hide{display:none}
img,object,svg{display:inline-block;vertical-align:middle}
textarea{height:auto;min-height:50px}
select{width:100%}
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}
a{color:#2156a5;text-decoration:underline;line-height:inherit}
a:hover,a:focus{color:#1d4b8f}
a img{border:0}
p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
p aside{font-size:.875em;line-height:1.35;font-style:italic}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
h1{font-size:2.125em}
h2{font-size:1.6875em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
h4,h5{font-size:1.125em}
h6{font-size:1em}
hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
em,i{font-style:italic;line-height:inherit}
strong,b{font-weight:bold;line-height:inherit}
small{font-size:60%;line-height:inherit}
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
ul,ol{margin-left:1.5em}
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
ul.circle{list-style-type:circle}
ul.disc{list-style-type:disc}
ul.square{list-style-type:square}
ul.circle ul:not([class]),ul.disc ul:not([class]),ul.square ul:not([class]){list-style:inherit}
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
dl dt{margin-bottom:.3125em;font-weight:bold}
dl dd{margin-bottom:1.25em}
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
h1{font-size:2.75em}
h2{font-size:2.3125em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
h4{font-size:1.4375em}}
table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
table thead,table tfoot{background:#f7f8f7}
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
table tr.even,table tr.alt{background:#f8f8f7}
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{line-height:1.6}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
.center{margin-left:auto;margin-right:auto}
.stretch{width:100%}
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
.clearfix::after,.float-group::after{clear:both}
:not(pre).nobreak{word-wrap:normal}
:not(pre).nowrap{white-space:nowrap}
:not(pre).pre-wrap{white-space:pre-wrap}
:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
pre>code{display:block}
pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
em em{font-style:normal}
strong strong{font-weight:400}
.keyseq{color:rgba(51,51,51,.8)}
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
.keyseq kbd:first-child{margin-left:0}
.keyseq kbd:last-child{margin-right:0}
.menuseq,.menuref{color:#000}
.menuseq b:not(.caret),.menuref{font-weight:inherit}
.menuseq{word-spacing:-.02em}
.menuseq b.caret{font-size:1.25em;line-height:.8}
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
b.button::before{content:"[";padding:0 3px 0 2px}
b.button::after{content:"]";padding:0 2px 0 3px}
p a>code:hover{color:rgba(0,0,0,.9)}
#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
#content{margin-top:1.25em}
#content::before{content:none}
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
#header>h1:only-child{border-bottom:1px solid #dddddf;padding-bottom:8px}
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
#header .details span:first-child{margin-left:-.125em}
#header .details span.email a{color:rgba(0,0,0,.85)}
#header .details br{display:none}
#header .details br+span::before{content:"\00a0\2013\00a0"}
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
#header .details br+span#revremark::before{content:"\00a0|\00a0"}
#header #revnumber{text-transform:capitalize}
#header #revnumber::after{content:"\00a0"}
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
#toc>ul{margin-left:.125em}
#toc ul.sectlevel0>li>a{font-style:italic}
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
#toc li{line-height:1.3334;margin-top:.3334em}
#toc a{text-decoration:none}
#toc a:active{text-decoration:underline}
#toctitle{color:#7a2518;font-size:1.2em}
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
body.toc2{padding-left:15em;padding-right:0}
body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
body.toc2.toc-right{padding-left:0;padding-right:15em}
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
#toc.toc2{width:20em}
#toc.toc2 #toctitle{font-size:1.375em}
#toc.toc2>ul{font-size:.95em}
#toc.toc2 ul ul{padding-left:1.25em}
body.toc2.toc-right{padding-left:0;padding-right:20em}}
#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
#content #toc>:first-child{margin-top:0}
#content #toc>:last-child{margin-bottom:0}
#footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
#content{margin-bottom:.625em}
.sect1{padding-bottom:.625em}
@media screen and (min-width:768px){#content{margin-bottom:1.25em}
.sect1{padding-bottom:1.25em}}
.sect1:last-child{padding-bottom:0}
.sect1+.sect1{border-top:1px solid #e7e7e9}
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
details{margin-left:1.25rem}
details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
details>summary::-webkit-details-marker{display:none}
details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
.admonitionblock>table td.icon{text-align:center;width:80px}
.admonitionblock>table td.icon img{max-width:none}
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
.exampleblock>.content>:first-child,.sidebarblock>.content>:first-child{margin-top:0}
.exampleblock>.content>:last-child,.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
.listingblock>.content{position:relative}
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
.listingblock:hover code[data-lang]::before{display:block}
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
.listingblock pre.highlightjs{padding:0}
.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
.listingblock pre.prettyprint{border-width:0}
.prettyprint{background:#f7f7f8}
pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
pre.prettyprint li code[data-lang]::before{opacity:1}
pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
table.linenotable td.code{padding-left:.75em}
table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
pre.pygments span.linenos{display:inline-block;margin-right:.75em}
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
.quoteblock blockquote{margin:0;padding:0;border:0}
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
.verseblock{margin:0 1em 1.25em}
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
.verseblock pre strong{font-weight:400}
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
.quoteblock .attribution br,.verseblock .attribution br{display:none}
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
.quoteblock.abstract{margin:0 1em 1.25em;display:block}
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;font-size:.85rem;text-align:left;margin-right:0}
p.tableblock:last-child{margin-bottom:0}
td.tableblock>.content{margin-bottom:1.25em;word-wrap:anywhere}
td.tableblock>.content>:last-child{margin-bottom:-1.25em}
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
table.grid-all>*>tr>*{border-width:1px}
table.grid-cols>*>tr>*{border-width:0 1px}
table.grid-rows>*>tr>*{border-width:1px 0}
table.frame-all{border-width:1px}
table.frame-ends{border-width:1px 0}
table.frame-sides{border-width:0 1px}
table.frame-none>colgroup+*>:first-child>*,table.frame-sides>colgroup+*>:first-child>*{border-top-width:0}
table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
th.halign-left,td.halign-left{text-align:left}
th.halign-right,td.halign-right{text-align:right}
th.halign-center,td.halign-center{text-align:center}
th.valign-top,td.valign-top{vertical-align:top}
th.valign-bottom,td.valign-bottom{vertical-align:bottom}
th.valign-middle,td.valign-middle{vertical-align:middle}
table thead th,table tfoot th{font-weight:bold}
tbody tr th{background:#f7f8f7}
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
p.tableblock>code:only-child{background:none;padding:0}
p.tableblock{font-size:1em}
ol{margin-left:1.75em}
ul li ol{margin-left:1.5em}
dl dd{margin-left:1.125em}
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
ul.unstyled,ol.unstyled{margin-left:0}
li>p:empty:only-child::before{content:"";display:inline-block}
ul.checklist>li>p:first-child{margin-left:-1em}
ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
ul.inline>li{margin-left:1.25em}
.unstyled dl dt{font-weight:400;font-style:normal}
ol.arabic{list-style-type:decimal}
ol.decimal{list-style-type:decimal-leading-zero}
ol.loweralpha{list-style-type:lower-alpha}
ol.upperalpha{list-style-type:upper-alpha}
ol.lowerroman{list-style-type:lower-roman}
ol.upperroman{list-style-type:upper-roman}
ol.lowergreek{list-style-type:lower-greek}
.hdlist>table,.colist>table{border:0;background:none}
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
td.hdlist2{word-wrap:anywhere}
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
.colist td:not([class]):first-child img{max-width:none}
.colist td:not([class]):last-child{padding:.25em 0}
.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
.imageblock.left{margin:.25em .625em 1.25em 0}
.imageblock.right{margin:.25em 0 1.25em .625em}
.imageblock>.title{margin-bottom:0}
.imageblock.thumb,.imageblock.th{border-width:6px}
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
.image.left{margin-right:.625em}
.image.right{margin-left:.625em}
a.image{text-decoration:none;display:inline-block}
a.image object{pointer-events:none}
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
sup.footnote a,sup.footnoteref a{text-decoration:none}
sup.footnote a:active,sup.footnoteref a:active,#footnotes .footnote a:first-of-type:active{text-decoration:underline}
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
#footnotes .footnote:last-of-type{margin-bottom:0}
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
div.unbreakable{page-break-inside:avoid}
.big{font-size:larger}
.small{font-size:smaller}
.underline{text-decoration:underline}
.overline{text-decoration:overline}
.line-through{text-decoration:line-through}
.aqua{color:#00bfbf}
.aqua-background{background:#00fafa}
.black{color:#000}
.black-background{background:#000}
.blue{color:#0000bf}
.blue-background{background:#0000fa}
.fuchsia{color:#bf00bf}
.fuchsia-background{background:#fa00fa}
.gray{color:#606060}
.gray-background{background:#7d7d7d}
.green{color:#006000}
.green-background{background:#007d00}
.lime{color:#00bf00}
.lime-background{background:#00fa00}
.maroon{color:#600000}
.maroon-background{background:#7d0000}
.navy{color:#000060}
.navy-background{background:#00007d}
.olive{color:#606000}
.olive-background{background:#7d7d00}
.purple{color:#600060}
.purple-background{background:#7d007d}
.red{color:#bf0000}
.red-background{background:#fa0000}
.silver{color:#909090}
.silver-background{background:#bcbcbc}
.teal{color:#006060}
.teal-background{background:#007d7d}
.white{color:#bfbfbf}
.white-background{background:#fafafa}
.yellow{color:#bfbf00}
.yellow-background{background:#fafa00}
span.icon>.fa{cursor:default}
a span.icon>.fa{cursor:inherit}
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
.conum[data-value] *{color:#fff!important}
.conum[data-value]+b{display:none}
.conum[data-value]::after{content:attr(data-value)}
pre .conum[data-value]{position:relative;top:-.125em}
b.conum *{color:inherit!important}
.conum:not([data-value]):empty{display:none}
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
p,blockquote,dt,td.content,td.hdlist1,span.alt,summary{font-size:1.0625rem}
p{margin-bottom:1.25rem}
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
.print-only{display:none!important}
@page{margin:1.25cm .75cm}
@media print{*{box-shadow:none!important;text-shadow:none!important}
html{font-size:80%}
a{color:inherit!important;text-decoration:underline!important}
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
abbr[title]{border-bottom:1px dotted}
abbr[title]::after{content:" (" attr(title) ")"}
pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
thead{display:table-header-group}
svg{max-width:100%}
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
#header,#content,#footnotes,#footer{max-width:none}
#toc,.sidebarblock,.exampleblock>.content{background:none!important}
#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
body.book #header{text-align:center}
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
body.book #header .details{border:0!important;display:block;padding:0!important}
body.book #header .details span:first-child{margin-left:0!important}
body.book #header .details br{display:block}
body.book #header .details br+span::before{content:none!important}
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
.listingblock code[data-lang]::before{display:block}
#footer{padding:0 .9375em}
.hide-on-print{display:none!important}
.print-only{display:block!important}
.hide-for-print{display:none!important}
.show-for-print{display:inherit!important}}
@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
.sect1{padding:0!important}
.sect1+.sect1{border:0}
#footer{background:none}
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
</style>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.3/styles/github.min.css">
</head>
<body class="book">
<div id="header">
<h1>[DRAFT] Perforce P4D Sample Storage Setup - LVM</h1>
<div class="details">
<span id="author" class="author">Perforce Professional Services</span><br>
<span id="email" class="email"><a href="mailto:consulting-helix-core@perforce.com">consulting-helix-core@perforce.com</a></span><br>
<span id="revnumber">version v2025.1,</span>
<span id="revdate">2025-07-02</span>
</div>
<div id="toc" class="toc">
<div id="toctitle">Table of Contents</div>
<ul class="sectlevel1">
<li><a href="#_preface">Preface</a></li>
<li><a href="#_why_use_lvm">1. Why use LVM ?</a></li>
<li><a href="#_sample_storage_setup_for_sdp_mounts_and_storage">2. Sample Storage Setup for SDP - Mounts and Storage</a>
<ul class="sectlevel2">
<li><a href="#_starting_state">2.1. Starting State</a></li>
<li><a href="#_storage_formatting_and_mounting_procedure">2.2. Storage Formatting and Mounting Procedure</a>
<ul class="sectlevel3">
<li><a href="#_lvm">2.2.1. LVM</a></li>
<li><a href="#_physical_volumespvs">2.2.2. Physical Volumes(PVs)</a></li>
<li><a href="#_volume_groups_vgs">2.2.3. Volume Groups (VGs)</a></li>
<li><a href="#_logical_volumes_lvs">2.2.4. Logical Volumes (LVs)</a></li>
<li><a href="#_formating_lvm_volumes">2.2.5. Formating LVM volumes</a></li>
<li><a href="#_update_etcfstab_mount_table">2.2.6. Update /etc/fstab mount table</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#_volume_expansion">3. Volume Expansion</a>
<ul class="sectlevel2">
<li><a href="#_expand_vg_by_expanding_underlying_disk">3.1. Expand VG by expanding underlying disk</a></li>
<li><a href="#_expand_vg_by_adding_more_disks">3.2. Expand VG by adding more disks</a></li>
<li><a href="#_lvm_storage_setup_script">3.3. LVM Storage setup script</a></li>
</ul>
</li>
<li><a href="#_notes_and_references">4. Notes and References</a></li>
</ul>
</div>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<h3 id="_todo_items" class="discrete">Todo Items</h3>
<div class="ulist">
<ul>
<li>
<p>Test script operation</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_preface">Preface</h2>
<div class="sectionbody">
<div class="paragraph">
<p>This document illustrates a basic set of commands to setup data storage using Linux Volume Manager (LVM).</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="paragraph">
<p>LVM is the preferred method of setup for Perforce volumes.
Both Physical servers and Cloud/VM servers benefit from features of LVM covered in this document.</p>
</div>
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>The goal in these examples is to configure three LVM storage volumes separate from the OS volume on a server destined to become a Helix Core server.
At the start of this procedure, empty volumes with no data are formatted.</p>
</div>
<h3 id="_console_sessions" class="discrete">Console sessions</h3>
<div class="paragraph">
<p>When console sessions are shown in the text:</p>
</div>
<div class="listingblock">
<div class="title">Normal user shown with <code>$</code> prompt</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console">$ ls -lR</code></pre>
</div>
</div>
<div class="listingblock">
<div class="title">Root user shown with <code>#</code> prompt</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console"># systemctl daemon-reload</code></pre>
</div>
</div>
<div class="paragraph">
<p><strong>Please Give Us Feedback</strong></p>
</div>
<div class="paragraph">
<p>Perforce welcomes feedback from our users.
Please send any suggestions for improving this document or the SDP to <a href="mailto:consulting-helix-core@perforce.com">consulting-helix-core@perforce.com</a>.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_why_use_lvm">1. Why use LVM ?</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Some of the benefits of using LVM over standard disk partitions are:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Expansion of physical volumes is not limited to the size remaining on the disk. Additional disks can be added to the Volume Group as needed for expansion.</p>
</li>
<li>
<p>Volume name/UUID are embedded into the media.  This helps identify snapshots and cloned volumes used for migrations.</p>
</li>
<li>
<p>LVM avoids need for UUID&#8217;s in <code>/etc/fstab</code>, as volumes are always assigned unique device names.</p>
</li>
</ul>
</div>
<div class="admonitionblock warning">
<table>
<tr>
<td class="icon">
<i class="fa icon-warning" title="Warning"></i>
</td>
<td class="content">
LVM also supports a volume snapshot and revert feature.  Howver, LVM snapshots incur a significant performance penalty due to the Copy-On-Write (COW) method utilized.   For this reason LVM snapshots are not recommended for use on Perforce volumes.
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_sample_storage_setup_for_sdp_mounts_and_storage">2. Sample Storage Setup for SDP - Mounts and Storage</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_starting_state">2.1. Starting State</h3>
<div class="paragraph">
<p>This procedure assumes the following start state:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Destination Server has a basic install of Ubuntu 24.04. ( RHEL/Rocky9 TBD ) with following installed:</p>
<div class="ulist">
<ul>
<li>
<p>LVM2, if missing run <code>apt install lvm2</code></p>
</li>
<li>
<p>XFS, if missing run <code>apt install xfsprogs</code></p>
</li>
</ul>
</div>
</li>
<li>
<p>Three separate storage volumes are attached Server / VM. (in addition to the OS root volume), intended to become <code>/p4depots</code>, <code>/p4logs</code>, and <code>/p4metadta</code>:</p>
<div class="ulist">
<ul>
<li>
<p><code>/p4depots</code> - Give this as much space as you think you&#8217;ll need.  This is highly variable.  You may want 30G source code projects, or 1T or more for virtual production or game development. Size can be increased easily and non-disruptively later, so you don&#8217;t need to overprovision (and overpay) for storage.</p>
</li>
<li>
<p><code>/p4metadata</code> - Use 25G to start.  This needs to hold (2) copies of the database.</p>
</li>
<li>
<p><code>/p4logs</code> - Use 20G to start.  Typically low usage, but large enough to contain large journals during any occasional purge/obliterate operations.</p>
</li>
</ul>
</div>
</li>
<li>
<p>Volumes may be Physical disks, Direct-Attached-Storage (DAS), EBS volumes on AWS, VMFS disks on a VM or other block storage.</p>
</li>
</ul>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="paragraph">
<p>There is no easy method of matching the device being attached to the assigned kernel name such as: <code>nvme1n1</code> or <code>nvme1n2</code>.   However if we choose disks of different sizes they can easliy be matched up with kernal assigned names.</p>
</div>
<div class="paragraph">
<p>For instance, in the example above, the 1000G volume <code>nvme2n1</code> is for <code>/p4depots</code>, the 25G volume <code>nvme1n1</code> is for <code>/p4metadata</code> and the 20G volume is for <code>/p4logs</code></p>
</div>
</td>
</tr>
</table>
</div>
<div class="ulist">
<ul>
<li>
<p>See Also:  <a href="https://www.reddit.com/r/linuxadmin/comments/8cg1t4/benefits_of_lvm/" class="bare">https://www.reddit.com/r/linuxadmin/comments/8cg1t4/benefits_of_lvm/</a></p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_storage_formatting_and_mounting_procedure">2.2. Storage Formatting and Mounting Procedure</h3>
<div class="paragraph">
<p>First, become root with the <code>sudo su -</code> command, and then list the mounted storage before we mount the new volumes:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console">$ sudo su -

# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        1.8G     0  1.8G   0% /dev
tmpfs           1.8G     0  1.8G   0% /dev/shm
tmpfs           1.8G   17M  1.8G   1% /run
tmpfs           1.8G     0  1.8G   0% /sys/fs/cgroup
/dev/nvme0n1p1   10G  1.6G  8.5G  16% /
tmpfs           356M     0  356M   0% /run/user/0</code></pre>
</div>
</div>
<div class="paragraph">
<p>You don&#8217;t yet see the newly attached volumes, as they&#8217;re not yet mounted.  But you can list them with <code>lsblk</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-bash hljs" data-lang="bash"># lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
nvme0n1     259:0    0   10G  0 disk
└─nvme0n1p1 259:1    0   10G  0 part /
nvme1n1     259:2    0   25G  0 disk
nvme2n1     259:3    0   20G  0 disk
nvme3n1     259:4    0  100G  0 disk</code></pre>
</div>
</div>
<div class="sect3">
<h4 id="_lvm">2.2.1. LVM</h4>
<div class="paragraph">
<p>The Linux Volume Manager (LVM) is used in place of old style disk partitions, and is much more flexible.   Volumes may be expanded while the system is running, and volumes may span more than one disk.</p>
</div>
<div class="paragraph">
<p>Ubuntu 24.04 installer includes LVM.</p>
</div>
<div class="ulist">
<ul>
<li>
<p>see: <a href="https://documentation.ubuntu.com/server/explanation/storage/about-lvm/#" class="bare">https://documentation.ubuntu.com/server/explanation/storage/about-lvm/#</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>This document provides a summary of only the basic commands to setup LVM following best practices.</p>
</div>
<div class="sidebarblock">
<div class="content">
<div class="title">LVM components</div>
<div class="dlist">
<dl>
<dt class="hdlist1">PV&#8217;s</dt>
<dd>
<p>Physical Volumes.  <code>PV</code> volumes provide storage to their assigned <code>VG</code>  Marking a disk as a <code>PV</code> makes it available to be assigned to a <code>VG</code></p>
</dd>
<dt class="hdlist1">VG&#8217;s</dt>
<dd>
<p>Volume Groups.  <code>VG</code> are comprised of one or more <code>PVs</code> that supply storage to the <code>VG</code>  The VG storage is comprised of all disks attached to it and is not limited to the size of any single disk.</p>
</dd>
<dt class="hdlist1">LV&#8217;s</dt>
<dd>
<p>Logical Volumes  <code>LVs</code> are composed by allocating space from a <code>VG</code>   Disks with different performance characteristics should be separated into different VG&#8217;s so they may be assigned to appropriate <code>LVs</code></p>
</dd>
</dl>
</div>
</div>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
LVM marks PV&#8217;s, VG&#8217;s and LV&#8217;s with unique <code>UUIDs</code> and includes the name of the <code>VG</code> or <code>LV</code> on the media.
</td>
</tr>
</table>
</div>
</div>
<div class="sect3">
<h4 id="_physical_volumespvs">2.2.2. Physical Volumes(PVs)</h4>
<div class="paragraph">
<p>Normally the entire disk is marked as a <code>PV</code>, however in the past folks have also marked disk <strong>partitions</strong> as <code>PVs</code>.</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
The reason full disks are used without parititions , is that any later disk expansion can then avoid expanding that partition.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>First mark each of the 3 new blank volumes as an <code>PV</code>.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console">[root@~]# pvcreate /dev/nvme1n1
Writing physical volume data to disk "/dev/nvme1n1"
Physical volume "/dev/nvme1n1" successfully created.

[root@~]# pvcreate /dev/nvme2n1
Writing physical volume data to disk "/dev/nvme2n1"
Physical volume "/dev/nvme2n1" successfully created.

[root@~]# pvcreate /dev/nvme3n1
Writing physical volume data to disk "/dev/nvme3n1"
Physical volume "/dev/nvme3n1" successfully created.</code></pre>
</div>
</div>
<h5 id="_display_pvs" class="discrete">Display PV&#8217;s</h5>
<div class="paragraph">
<p>You can display the new PV&#8217;s in short or long mode.</p>
</div>
<div class="listingblock">
<div class="title">Short</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console"># pvs
PV            VG   Fmt     Attr   PSize  PFree
/dev/nvme1n1       lvm2    ---   &lt;25G    &lt;25G
/dev/nvme2n1       lvm2    ---   &lt;20G    &lt;20G
/dev/nvme3n1       lvm2    ---   &lt;1000G  &lt;1000G</code></pre>
</div>
</div>
<div class="listingblock">
<div class="title">Long</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console"># pvdisplay
... &lt; many lines showing Name, size, UUID &gt;</code></pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="_volume_groups_vgs">2.2.3. Volume Groups (VGs)</h4>
<div class="paragraph">
<p>Next create <code>VGs</code> for each of the three types of storage.</p>
</div>
<div class="paragraph">
<p>We will name the 3 <code>VGs</code> as:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>vg_p4metadata</p>
</li>
<li>
<p>vg_p4logs</p>
</li>
<li>
<p>vg_p4depots</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Create the new 'VGs' and assign the appropriate <code>PV</code> with:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console"># vgcreate vg_p4metadata /dev/nvme1n1      <i class="conum" data-value="1"></i><b>(1)</b>
Volume group "vg-p4metadata" successfully created

# vgcreate vg_p4logs /dev/nvme2n1          <i class="conum" data-value="2"></i><b>(2)</b>
Volume group "vg-p4logs" successfully created

# vgcreate vg_p4depots /dev/nvme3n1        <i class="conum" data-value="3"></i><b>(3)</b>
Volume group "vg-p4depots" successfully created</code></pre>
</div>
</div>
<div class="colist arabic">
<table>
<tr>
<td><i class="conum" data-value="1"></i><b>1</b></td>
<td>p4metdata was determined to use <code>nvme1n1</code> by matching disk size of 25GB</td>
</tr>
<tr>
<td><i class="conum" data-value="2"></i><b>2</b></td>
<td>p4logs was determined to use <code>nvme2n1</code> by matching disk size of 20GB</td>
</tr>
<tr>
<td><i class="conum" data-value="3"></i><b>3</b></td>
<td>p4depots was determined to use <code>nvme3n1</code> by matching disk size of 1000GB</td>
</tr>
</table>
</div>
<h5 id="_display_vgs" class="discrete">Display VG&#8217;s</h5>
<div class="paragraph">
<p>You can display the new VG&#8217;s in short or long mode.</p>
</div>
<div class="listingblock">
<div class="title">Short</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console"># vgs
VG              #PV  #LV  #SN  Attr   VSize   VFree
vg_p4metadata   x    0     0  wz--n-  &lt;250G
vg_p4logs       x    0     0  wz--n-  &lt;200G
vg_p4depots     x    0     0  wz--n-  &lt;1000G</code></pre>
</div>
</div>
<div class="listingblock">
<div class="title">Long</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console"># vgdisplay
... &lt; many lines showing Name, Size, PV UUID &gt;</code></pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="_logical_volumes_lvs">2.2.4. Logical Volumes (LVs)</h4>
<div class="paragraph">
<p>Finally create logical volumes <code>LVs</code> inside each <code>VG</code>, using all of the available storage.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console"># lvcreate -n lv_p4metadata -L 100%FREE  vg_p4metadata
Logical volume "lv_p4metadata" created.

# lvcreate -n lv_p4logs -L 100%FREE  vg_p4logs
Logical volume "lv_p4logs" created.

# lvcreate -n lv_p4depots -L 100%FREE  vg_p4depots
Logical volume "lv_p4depots" created.</code></pre>
</div>
</div>
<h5 id="_display_lvs" class="discrete">Display LV&#8217;s</h5>
<div class="paragraph">
<p>You can display the new LV&#8217;s in short or long mode.</p>
</div>
<div class="listingblock">
<div class="title">Short</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console"># lvs
LV              VG              Attr     LSize  Pool  Origin  Data% Meta%
lv_p4metadata   vg_p4metadata  -wi-a-    25G
lv_p4logs       vg_p4logs      -wi-a- 0  20G
lv_p4depots     vg_p4depots    -wi-a- 0  1000G</code></pre>
</div>
</div>
<div class="listingblock">
<div class="title">Long</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console"># lvdisplay
... &lt; many lines showing Name, Size, Status, LV UUID &gt;</code></pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="_formating_lvm_volumes">2.2.5. Formating LVM volumes</h4>
<div class="paragraph">
<p><code>LVM</code> <strong>physical block devices</strong> are mapped to Linux <strong>virtual block devices</strong> by the Device Mapper.</p>
</div>
<div class="paragraph">
<p>The device mapper will automatically create devices for the above LVM disks as follows:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>/dev/mapper/vg_p4metadata-lv_p4metadata</p>
</li>
<li>
<p>/dev/mapper/vg_p4logs-lv_p4logs</p>
</li>
<li>
<p>/dev/mapper/vg_p4depots-lv_p4depots</p>
</li>
</ul>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
The explicit <code>LVM</code> device names assigned makes formatting these volumes much safer.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>Next, Format these new <code>LVs</code> as XFS.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console"># mkfs.xfs /dev/mapper/vg_p4metadata-lv_p4metadata
meta-data=/dev/mapper/vg_p4metadata-lv_p4metadata           isize=512    agcount=16, agsize=1638400 blks
           =                       sectsz=512   attr=2, projid32bit=1
           =                       crc=1        finobt=1, sparse=1, rmapbt=0
           =                       reflink=1
  data     =                       bsize=4096   blocks=26214400, imaxpct=25
           =                       sunit=1      swidth=1 blks
  naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
  log      =internal log           bsize=4096   blocks=12800, version=2
           =                       sectsz=512   sunit=1 blks, lazy-count=1
  realtime =none                   extsz=4096   blocks=0, rtextents=0

# mkfs.xfs /dev/mapper/vg_p4logs-lv_p4logs
meta-data=/dev/mapper/vg_p4logs-lv_p4logs           isize=512    agcount=16, agsize=1638400 blks
           =                       sectsz=512   attr=2, projid32bit=1
           =                       crc=1        finobt=1, sparse=1, rmapbt=0
           =                       reflink=1
  data     =                       bsize=4096   blocks=26214400, imaxpct=25
           =                       sunit=1      swidth=1 blks
  naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
  log      =internal log           bsize=4096   blocks=12800, version=2
           =                       sectsz=512   sunit=1 blks, lazy-count=1
  realtime =none                   extsz=4096   blocks=0, rtextents=0

# mkfs.xfs /dev/mapper/vg_p4depots-lv_p4depots
meta-data=/dev/mapper/vg_p4depots-lv_p4depots           isize=512    agcount=16, agsize=1638400 blks
           =                       sectsz=512   attr=2, projid32bit=1
           =                       crc=1        finobt=1, sparse=1, rmapbt=0
           =                       reflink=1
  data     =                       bsize=4096   blocks=26214400, imaxpct=25
           =                       sunit=1      swidth=1 blks
  naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
  log      =internal log           bsize=4096   blocks=12800, version=2
           =                       sectsz=512   sunit=1 blks, lazy-count=1
  realtime =none                   extsz=4096   blocks=0, rtextents=0</code></pre>
</div>
</div>
<div class="admonitionblock warning">
<table>
<tr>
<td class="icon">
<i class="fa icon-warning" title="Warning"></i>
</td>
<td class="content">
Formatting the wrong device may destroy data !
</td>
</tr>
</table>
</div>
</div>
<div class="sect3">
<h4 id="_update_etcfstab_mount_table">2.2.6. Update /etc/fstab mount table</h4>
<div class="paragraph">
<p>Make a backup copy of the <code>/etc/fstab</code> file, and then modify that file to create new volumes.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console"># cd /etc

# ls -l fstab*
-rw-r--r--. 1 root root 394 Nov 15 04:43 fstab

# cp -p fstab fstab.bak.2022-03-08</code></pre>
</div>
</div>
<h4 id="_edit_fstab" class="discrete">Edit fstab</h4>
<div class="paragraph">
<p>Next add entries to <code>/etc/fstab</code> for the mount points.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console"># echo "/dev/mapper/vg_p4metadata-lv_p4metadata /p4metadata xfs defaults 0 0" &gt;&gt; /etc/fstab
# echo "/dev/mapper/vg_p4logs-lv_p4logs /p4logs xfs defaults 0 0" &gt;&gt; /etc/fstab
# echo "/dev/mapper/vg_p4depots-lv_p4depots /p4depots xfs defaults 0 0" &gt;&gt; /etc/fstab</code></pre>
</div>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
The previous method of mounting Volumes in <code>/etc/fstab`</code> by their <code>UUID</code>  values is not used with LVM.  LVM uses UUID&#8217;s internally, and the Linux kernel Device mapper always maps UUID&#8217;s to the same device.
</td>
</tr>
</table>
</div>
<h4 id="_update_mounts" class="discrete">Update mounts</h4>
<div class="paragraph">
<p>After changing <code>/etc/fstab</code> run this command up update mount info.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console"># systemctl daemon-reload</code></pre>
</div>
</div>
<div class="admonitionblock caution">
<table>
<tr>
<td class="icon">
<i class="fa icon-caution" title="Caution"></i>
</td>
<td class="content">
Run the <code>systemctl daemon-reload</code> command after each change to <code>/etc/fstab</code> or bad things might happen.  It is also a good idea to mount new filesystems the first time with <code>mount -a</code> which should report any errors in <code>/etc/fstab</code> before rebooting the machine.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>Proceed with creating empty directories that will be the "mount points" for the volume to be mounted.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console"># mkdir /p4depots /p4logs /p4metadata</code></pre>
</div>
</div>
<div class="paragraph">
<p>Next, use the <code>mount -a</code> command.  This will now assocate the mount points you just created with the storage device information that is now in that <code>/etc/fstab</code> file, and mount the volumes.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console"># mount -a</code></pre>
</div>
</div>
<div class="paragraph">
<p>Then see if they are mounted.  This is what victory looks like, with the <code>/p4*</code> volumes all mounted with desired sizes:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console"># df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        1.8G     0  1.8G   0% /dev
tmpfs           1.8G     0  1.8G   0% /dev/shm
tmpfs           1.8G   17M  1.8G   1% /run
tmpfs           1.8G     0  1.8G   0% /sys/fs/cgroup
/dev/nvme0n1p1   10G  1.6G  8.5G  16% /
tmpfs           356M     0  356M   0% /run/user/0
/dev/mapper/vg_p4metadata-lv_p4metadata  120G  890M  120G   1% /p4metadata
/dev/mapper/vg_p4logs-lv_p4logs          100G  747M  100G   1% /p4logs
/dev/mapper/vg_p4depots-lv_p4depots      500G  3.6G  497G   1% /p4depots</code></pre>
</div>
</div>
<div class="paragraph">
<p>At this point, you are ready to install the Server Deployment Package (SDP) software.</p>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_volume_expansion">3. Volume Expansion</h2>
<div class="sectionbody">
<div class="paragraph">
<p>An LVM partition can usually be expanded while the system is running without any outage.</p>
</div>
<div class="paragraph">
<p>The procedure involves the following steps:</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Expand the associated VG by one of following</p>
<div class="olist loweralpha">
<ol class="loweralpha" type="a">
<li>
<p>Expand the underlying PV disk ( such as a virtual disk )</p>
<div class="olist lowerroman">
<ol class="lowerroman" type="i">
<li>
<p>Rescan the storage buss</p>
</li>
<li>
<p>Resize the PV</p>
</li>
<li>
<p>Extend the LV    -or-</p>
</li>
</ol>
</div>
</li>
<li>
<p>Add additonal disks to the VG ( typically physical disks )</p>
<div class="olist lowerroman">
<ol class="lowerroman" type="i">
<li>
<p>Rescan the storage buss</p>
</li>
<li>
<p>Extend the VG</p>
</li>
<li>
<p>Extend the LV</p>
</li>
</ol>
</div>
</li>
</ol>
</div>
</li>
</ol>
</div>
<div class="sect2">
<h3 id="_expand_vg_by_expanding_underlying_disk">3.1. Expand VG by expanding underlying disk</h3>
<div class="paragraph">
<p>In a virtual environment it is typically easy to expand the size of the underlying disk.</p>
</div>
<div class="admonitionblock caution">
<table>
<tr>
<td class="icon">
<i class="fa icon-caution" title="Caution"></i>
</td>
<td class="content">
Even though this procedure can be run without downtime, to be safe, ensure you have a recent backup of the system.
</td>
</tr>
</table>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Expand the virtual block storage device, by changing its size on AWS,  VMware, or other environment.</p>
</li>
<li>
<p>Rescan the VM&#8217;s <strong>scsi-buss</strong>  to pick up the change</p>
</li>
</ol>
</div>
<div class="openblock">
<div class="content">
<div class="paragraph">
<p>Note replace <strong>nvme1n1</strong> with your block device</p>
</div>
</div>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console">$ sudo su
# echo 1 &gt; /sys/block/*nvme1n1*/device/rescan_controller
# exit

//  Alternate procedure
$ sudo apt install scsi-tools
$ sudo rescan-scsi-bus -s</code></pre>
</div>
</div>
<div class="olist arabic">
<ol class="arabic" start="3">
<li>
<p>Resize the PV to use the new expaned size</p>
</li>
</ol>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console">### Note replace *nvme1n1* with your block device
$ sudo pvresize /dev/*nvme1n1*</code></pre>
</div>
</div>
<div class="olist arabic">
<ol class="arabic" start="4">
<li>
<p>Resize the LV to use the new storage</p>
</li>
</ol>
</div>
<div class="openblock">
<div class="content">
<div class="paragraph">
<p>Note replace <code>/dev/mapper/vg_p4depots-lv_p4depot</code> with your device
Run one of the following</p>
</div>
</div>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console">$ sudo lvextend -l +100%FREE /dev/mapper/vg_p4depots-lv_p4depots
$ sudo lvextend -l +100%FREE /dev/mapper/vg_p4logs-lv_p4logs
$ sudo lvextend -l +100%FREE /dev/mapper/vg_p4metadata-lv_p4metadata</code></pre>
</div>
</div>
<div class="olist arabic">
<ol class="arabic" start="5">
<li>
<p>Grow the Filesystem</p>
</li>
</ol>
</div>
<div class="openblock">
<div class="content">
<div class="paragraph">
<p>Note replace <code>/dev/mapper/vg_p4depots-lv_p4depots</code> with your device</p>
</div>
</div>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console"># xfs_growfs /dev/mapper/vg_p4depots-lv_p4depots     # Full Size</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_expand_vg_by_adding_more_disks">3.2. Expand VG by adding more disks</h3>
<div class="admonitionblock caution">
<table>
<tr>
<td class="icon">
<i class="fa icon-caution" title="Caution"></i>
</td>
<td class="content">
Even though this procedure can be run without downtime, to be safe, ensure you have a recent backup of the system.
</td>
</tr>
</table>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Expand the VG by adding additional disks to the VG.</p>
</li>
<li>
<p>Hot-pluggable server disks are required to add without downtime.  After adding the disk,  rescan the VM&#8217;s <strong>scsi-buss</strong>  to pick up the change</p>
</li>
</ol>
</div>
<div class="paragraph">
<p>To determine the exact device name of the added disk, look at the kernel ring buffer for the expected device name immediatly after adding the disk.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console">$ sudo dmesg | grep nvme     # If device is expected to be nvme*</code></pre>
</div>
</div>
<div class="openblock">
<div class="content">
<div class="paragraph">
<p>Note replace <strong>nvme5n1</strong> with your block device shown with <code>dmesg</code>
sudo dmesg  # Look for new block device signature, e.g <code>nvme5n1</code></p>
</div>
</div>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console">$ sudo su
# echo 1 &gt; /sys/block/*nvme5n1*/device/rescan_controller
# exit

#Alternate procedure
$ sudo apt install scsi-tools
$ sudo rescan-scsi-bus</code></pre>
</div>
</div>
<div class="olist arabic">
<ol class="arabic" start="3">
<li>
<p>Mark new Disk as a PV</p>
</li>
</ol>
</div>
<div class="openblock">
<div class="content">
<div class="paragraph">
<p>Note replace <strong>nvme5n1</strong> with your new device</p>
</div>
</div>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console">$ sudo pvcreate /dev/*nvm5n1*</code></pre>
</div>
</div>
<div class="olist arabic">
<ol class="arabic" start="4">
<li>
<p>Extend the VG</p>
</li>
</ol>
</div>
<div class="openblock">
<div class="content">
<div class="paragraph">
<p>Replace <strong>nvme5n1</strong> with your new disk</p>
</div>
</div>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console">$ sudo vgextend vg_p4metadata-lv_p4metadata /dev/*nvme5n1*
  Volume group "vg_p4metadata" sucessfully extended</code></pre>
</div>
</div>
<div class="olist arabic">
<ol class="arabic" start="5">
<li>
<p>Extend the LV</p>
</li>
</ol>
</div>
<div class="openblock">
<div class="content">
<div class="paragraph">
<p>Replace the LV with your desired LV</p>
</div>
</div>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console">$ sudo lvextend -l +100%FREE /dev/mapper/vg_p4metadata-lv_p4metadata
  Size of logical volume "lv_p4metadata" changed fromm 205GB to 300GB
  Logical volume "lv_p4metadata" sucessfully resized.</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_lvm_storage_setup_script">3.3. LVM Storage setup script</h3>
<div class="paragraph">
<p>For reference if device names are known in advance,  the LVM setup procedure may be scripted as follows:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-bash hljs" data-lang="bash">#!/bin/bash

#NOTE DRAFT,  error checking not fully included

# Devices to format  ( root on nvme1n1 )
DEV_META="/dev/nvme2n1"
DEV_LOGS="/dev/nvme3n1"
DEV_DEPOTS="/dev/nvme4n1"

# Mount points
MP_META="/p4metadata"
MP_LOGS="/p4logs"
MP_DEPOTS="/p4depots"

# VGs
VG_META=vg_p4metadata
VG_LOGS=vg_p4logs
VG_DEPOTS=vg_p4depots

# LVs
LV_META=lv_p4metadata
LV_LOGS=lv_p4logs
LV_DEPOTS=lv_p4depots


# Backup /etc/fstab
cp /etc/fstab /etc/fstab.bak.$(date +%F)

# If device unused, create PV's
for dev in $DEV_META $DEV_LOGS $DEV_DEPOTS; do
    if blkid "$dev" &amp;&gt; /dev/null; then
        echo "Warning: $dev already has a file system. Skipping mkfs.xfs."
    else
        echo "Creating PV on $dev"
        pvcreate "$dev"
    fi
done

# Create VG's
vgcreate $VG_META $DEV_META
vgcreate $VG_LOGS $DEV_LOGS
vgcreate $VG_DEPOTS $DEV_DEPOTS

#Create LV's
lvcreate -n $LV_META   -L 100%FREE $VG_META
lvcreate -n $LV_LOGS   -L 100%FREE $VG_LOGS
lvcreate -n $LV_DEPOTS -L 100%FREE $VG_DEPOTS


# Create mount points if they don't exist
[ ! -d "$MP_META" ] &amp;&amp; mkdir -p "$MP_META"
[ ! -d "$MP_LOGS" ] &amp;&amp; mkdir -p "$MP_LOGS"
[ ! -d "$MP_DEPOTS" ] &amp;&amp; mkdir -p "$MP_DEPOTS"


# Add entries to /etc/fstab
echo "/dev/mapper/${VG_META}-${LV_META}  ${MP_META} xfs defaults 0 0" &gt;&gt; /etc/fstab
echo "/dev/mapper/${VG_LOGS}-${LV_LOGS}  ${MP_LOGS} xfs defaults 0 0" &gt;&gt; /etc/fstab
echo "/dev/mapper/${VG_DEPOTS}-${LV_DEPOTS}  ${MP_DEPOTS} xfs defaults 0 0" &gt;&gt; /etc/fstab

# Reload systemd daemon
echo "Reloading systemd to apply changes to /etc/fstab."
systemctl daemon-reload

# Mount all file systems
mount -a

# Verify mounts
mountpoint "$MP_DEPOTS" || echo "Error: $MP_DEPOTS is not mounted."
mountpoint "$MP_LOGS" || echo "Error: $MP_LOGS is not mounted."
mountpoint "$MP_META" || echo "Error: $MP_METADATA is not mounted."

# Display current mounts
df -h</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_notes_and_references">4. Notes and References</h2>
<div class="sectionbody">
<div class="paragraph">
<p>A few possible issues that may come up are:</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Mounting duplicate named Disks</p>
<div class="ulist">
<ul>
<li>
<p>If you clone a disk and mount it to the same machine you will get an error because the UUID&#8217;s and LVM assigned name are the same.</p>
</li>
<li>
<p><a href="https://unix.stackexchange.com/questions/495669/how-to-mount-lvm-partitions-with-duplicate-names" class="bare">https://unix.stackexchange.com/questions/495669/how-to-mount-lvm-partitions-with-duplicate-names</a></p>
</li>
</ul>
</div>
</li>
<li>
<p>Snapshot and revert before dangerous ops.</p>
<div class="ulist">
<ul>
<li>
<p><a href="https://digitalcave.ca/resources/computer/lvm-snapshots.jsp" class="bare">https://digitalcave.ca/resources/computer/lvm-snapshots.jsp</a></p>
</li>
<li>
<p><a href="https://askubuntu.com/questions/424225/setting-up-lvm-snapshot-as-a-backup-restore-point-in-ubuntu" class="bare">https://askubuntu.com/questions/424225/setting-up-lvm-snapshot-as-a-backup-restore-point-in-ubuntu</a></p>
</li>
<li>
<p><a href="https://www.percona.com/blog/disaster-lvm-performance-in-snapshot-mode/" class="bare">https://www.percona.com/blog/disaster-lvm-performance-in-snapshot-mode/</a></p>
</li>
</ul>
</div>
</li>
</ol>
</div>
</div>
</div>
</div>
<div id="footer">
<div id="footer-text">
Version v2025.1<br>
Last updated 2025-07-02 18:29:34 -0400
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.3/highlight.min.js"></script>
<script>
if (!hljs.initHighlighting.called) {
  hljs.initHighlighting.called = true
  ;[].slice.call(document.querySelectorAll('pre.highlight > code[data-lang]')).forEach(function (el) { hljs.highlightBlock(el) })
}
</script>
</body>
</html>
# Change User Description Committed
#3 31737 lee_marzke Misc clerical updates.
#2 31736 lee_marzke Cleanup / refinement of draft 1
#1 31732 lee_marzke 1st draft of LVM Storage Doc