\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{ethiraj} \pdfinfo{ /Title (fb.pdf) /Creator (Cheatography) /Author (ethiraj) /Subject (FB Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{EB6123} \definecolor{LightBackground}{HTML}{FDF5F1} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{FB Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{ethiraj} via \textcolor{DarkBackground}{\uline{cheatography.com/177312/cs/37022/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}ethiraj \\ \uline{cheatography.com/ethiraj} \\ \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Not Yet Published.\\ Updated 4th May, 2023.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{multicols*}{3} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Flashblade}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{p{5.377cm}}{\vspace{1px}\centerline{\includegraphics[width=5.1cm]{/web/www.cheatography.com/public/uploads/ethiraj_1676011925_Screenshot 2022-11-21 at 1.59.06 PM.png}}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{2.4885 cm} x{2.4885 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Blade commands}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{Commands}} & {\bf{ Description }} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} pureblade list & {\emph{To list the blades in FB}} \tn % Row Count 3 (+ 2) % Row 2 \SetRowColor{LightBackground} purehw list -{}-spec & {\emph{To show the blade serial number}} \tn % Row Count 5 (+ 2) % Row 3 \SetRowColor{white} hal-show -e /local | jq '.family, .id, .asy, .desc' & {\emph{To show blade type and model}} \tn % Row Count 8 (+ 3) % Row 4 \SetRowColor{LightBackground} hal-eeprom -e /local/eeprom/id -r | jq . & {\emph{To show blade serial number and Node ID}} \tn % Row Count 11 (+ 3) % Row 5 \SetRowColor{white} fbdiag wait-helper -v -n1.3 & {\emph{To verify Process status in blade}} \tn % Row Count 13 (+ 2) % Row 6 \SetRowColor{LightBackground} rpc.py blades\_available | jq . | egrep \seqsplit{"ir.*8001|cluster\_id"} & {\emph{To verify blade in cluster geometry}} \tn % Row Count 16 (+ 3) % Row 7 \SetRowColor{white} exec.py \seqsplit{-n\$chassisNum.\$bladeNum} "ir\_version | grep build" & {\emph{To verify the Blade Purity / Build version}} \tn % Row Count 19 (+ 3) % Row 8 \SetRowColor{LightBackground} exec.py -nx -{}- sudo netstat -anot | grep \textless{}CLIENT\_IP:PORT\textgreater{} & {\emph{To verify any connections to blade}} \tn % Row Count 22 (+ 3) % Row 9 \SetRowColor{white} sudo supervisorctl status nfsd & {\emph{verify NFS is running on the blade}} \tn % Row Count 24 (+ 2) % Row 10 \SetRowColor{LightBackground} fbdiag nfs-health-check -{}-mgmt-vip ch1-fb1 | grep -c "running on server" & {\emph{To verify any authority running on the blade}} \tn % Row Count 28 (+ 4) % Row 11 \SetRowColor{white} nfs\_control.py \seqsplit{-n\$chassisNum.\$bladeNum} stop -v & {\emph{Stop NFS on the blade}} \tn % Row Count 31 (+ 3) \end{tabularx} \par\addvspace{1.3em} \vfill \columnbreak \begin{tabularx}{5.377cm}{x{2.4885 cm} x{2.4885 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Blade commands (cont)}} \tn % Row 12 \SetRowColor{LightBackground} nfs\_control.py \seqsplit{-n\$chassisNum.\$bladeNum} start -v & {\emph{Start NFS on the blade}} \tn % Row Count 3 (+ 3) % Row 13 \SetRowColor{white} purehw setattr -{}-identify on \seqsplit{CH\$chassisNum.FB\$bladeNum} & {\emph{Turn on Locator LED on blade}} \tn % Row Count 6 (+ 3) % Row 14 \SetRowColor{LightBackground} purehw setattr -{}-identify off \seqsplit{CH\$chassisNum.FB\$bladeNum} & {\emph{Turn off locator LED on blade}} \tn % Row Count 9 (+ 3) % Row 15 \SetRowColor{white} puregrep -E "is\_evacuating changed to true|start evacuation" .{\emph{fb}}/nfs.log & {\emph{To check when Evac started on the blade \textless{}run from FUSE\textgreater{}}} \tn % Row Count 13 (+ 4) % Row 16 \SetRowColor{LightBackground} puregrep -E "Calling blade removal RPC|blades observed geom change" {\emph{{[}af{]}m?/platform.log}} & {\emph{To check when Evac completed on the blade \textless{}run from FUSE\textgreater{}}} \tn % Row Count 18 (+ 5) % Row 17 \SetRowColor{white} date; fbupgrade power-ctl -v -nc.b cycle & {\emph{Powercycle the blade}} \tn % Row Count 20 (+ 2) % Row 18 \SetRowColor{LightBackground} hal-show -e /local/temperature -{}-headers name endpoint value units & {\emph{How to check Blade temperature}} \tn % Row Count 24 (+ 4) % Row 19 \SetRowColor{white} lsblk & {\emph{How to check Blade filesystem usage}} \tn % Row Count 26 (+ 2) % Row 20 \SetRowColor{LightBackground} sudo smartctl -i /dev/sda & {\emph{How to check Blade SSD information}} \tn % Row Count 28 (+ 2) % Row 21 \SetRowColor{white} sudo dmidecode -t 17 & {\emph{How to check Blade DIMM information}} \tn % Row Count 30 (+ 2) \end{tabularx} \par\addvspace{1.3em} \vfill \columnbreak \begin{tabularx}{5.377cm}{x{2.4885 cm} x{2.4885 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Blade commands (cont)}} \tn % Row 22 \SetRowColor{LightBackground} date; exec.py -n1-2,4-11,13,14 -{}- 'time=`date +\%H:\%M:`; zgrep "\$time.{\emph{counter.}}S3.*allocated\_aus" /logs/nfs.log' | awk '\{a=a+\$12;b=b+\$13\}END\{print a,b\}' & To check EVAC is Progressing or not , Run twice at 10 second interval \tn % Row Count 8 (+ 8) % Row 23 \SetRowColor{white} & How to evacuate the blade (there are few ways, here we are stopping the NFS )? \tn % Row Count 13 (+ 5) % Row 24 \SetRowColor{LightBackground} hal-slot -l & How to check Blade is powered ON or OFF in slot \tn % Row Count 16 (+ 3) % Row 25 \SetRowColor{white} fbdiag nfs-health-check -{}-mgmt-vip ch1-fb1 |grep 'booting for' & commands to check Authority booted \tn % Row Count 20 (+ 4) % Row 26 \SetRowColor{LightBackground} exec.py -na -{}- 'zgrep -a " {[}AEK{]} " /logs/nfs.log|tail' & Check for any AEK errors on Blades \tn % Row Count 23 (+ 3) % Row 27 \SetRowColor{white} exec.py -nx.x 'sudo rsync -auv \seqsplit{ch1-fb1:/ssd/nfs\_conf}.json \seqsplit{/ssd/nfs\_conf.json'} & Copy tunable from one blade to another \tn % Row Count 27 (+ 4) % Row 28 \SetRowColor{LightBackground} zgrep \seqsplit{"flash\_read\_uncorrectable}, all Vt retry options were unsuccessful" nfs.log | perl -n -e '/(\textbackslash{}{[}U\textbackslash{}d+\textbackslash{}{]}).{\emph{\textless{}(SM=\textbackslash{}d+ BNK=\textbackslash{}d+ CE=\textbackslash{}d+ LUN=\textbackslash{}d+ BLK=\textbackslash{}d+)/\&\& print \$1 . " " . \$2 . "\textbackslash{}n"' | sort | uniq | perl -n -e '/(\textbackslash{}{[}U\textbackslash{}d+\textbackslash{}{]}).}}(SM=\textbackslash{}d+ BNK=\textbackslash{}d+ CE=\textbackslash{}d+ LUN=\textbackslash{}d+) BLK=(\textbackslash{}d+)/\&\& print \$1 . " " . \$2 . " PLANE=" . \$3\%4 . "\textbackslash{}n"' | sort | uniq -c & Checking for Bad blocks and bad planes \tn % Row Count 44 (+ 17) \end{tabularx} \par\addvspace{1.3em} \vfill \columnbreak \begin{tabularx}{5.377cm}{x{2.4885 cm} x{2.4885 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Blade commands (cont)}} \tn % Row 29 \SetRowColor{LightBackground} ir@ch1-fb5:\textasciitilde{}\$ \seqsplit{/opt/ir/devcat\_lookup}.py device\_health|grep -A10 \seqsplit{"sketchy\_block\_ages\_sec"} & How to check Bad block rebuild progress , check for total count reached to "0" \tn % Row Count 5 (+ 5) % Row 30 \SetRowColor{white} tgrep -a "Blade nand type detected" ch{\emph{fb}}/platform.log* | uniq -f4 & Getting blade type information from FUSE logs \tn % Row Count 9 (+ 4) % Row 31 \SetRowColor{LightBackground} fb dump hdiag -{}-key puresmb.status & To check SMB type configured from FUSE \tn % Row Count 11 (+ 2) % Row 32 \SetRowColor{white} fb info smb & To check SMB type configured from FUSE \tn % Row Count 13 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{2.4885 cm} x{2.4885 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{SEV-1\textbackslash{}Performance issue helpful commands}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{purearray monitor}} & show the cluster's throughput \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} {\bf{purearray monitor – protocol nfs -{}-client}} & show all nfs client's stats \tn % Row Count 5 (+ 3) % Row 2 \SetRowColor{LightBackground} {\bf{Purehw list}} & verify all blades are healthy , XFM, NW ports are healthy and no failures \tn % Row Count 9 (+ 4) % Row 3 \SetRowColor{white} {\bf{exec.py -na -{}- 'zgrep -a " {[}AEK{]} " /logs/nfs.log|tail'}} & Check for any AEK errors across blades in NFS logs \tn % Row Count 12 (+ 3) % Row 4 \SetRowColor{LightBackground} {\bf{Purearray list -{}-space}} & check Array got sufficient space \tn % Row Count 14 (+ 2) % Row 5 \SetRowColor{white} {\bf{purealert list}} & verify for any active Alerts on the blade \tn % Row Count 17 (+ 3) % Row 6 \SetRowColor{LightBackground} {\bf{./fbhealth -{}-fail}} & Run fbhealth live on system (Always push latest FBtools to array \tn % Row Count 21 (+ 4) % Row 7 \SetRowColor{white} {\bf{Pureblade list}} & Check all blades are healthy \tn % Row Count 23 (+ 2) % Row 8 \SetRowColor{LightBackground} {\bf{exec.py -na 'zgrep -a "Vt retry" /logs/nfs.log}} & Check for any BAD blocks on the blade \tn % Row Count 26 (+ 3) % Row 9 \SetRowColor{white} {\bf{exec.py -sa "fbdiag monitor-portstats -{}-monitor err -{}-once"}} & Check for any port errors \textless{}Single chassis\textgreater{} \tn % Row Count 30 (+ 4) \end{tabularx} \par\addvspace{1.3em} \vfill \columnbreak \begin{tabularx}{5.377cm}{x{2.4885 cm} x{2.4885 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{SEV-1\textbackslash{}Performance issue helpful commands (cont)}} \tn % Row 10 \SetRowColor{LightBackground} {\bf{fbdiag monitor-portstats -{}-monitor err -{}-once}} & Check for any port errors \textless{}Multi Chassis\textgreater{} \tn % Row Count 3 (+ 3) % Row 11 \SetRowColor{white} {\bf{fbdiag monitor-portstats -{}-once}} & verify for Port serving IO's \tn % Row Count 5 (+ 2) % Row 12 \SetRowColor{LightBackground} exec.py -na 'zgrep -E " E | A | K " \seqsplit{/logs/platform.log.*} & Check for any AEK errors in Platform logs \tn % Row Count 8 (+ 3) % Row 13 \SetRowColor{white} bdiag nfs-health-check -{}-mgmt-vip ir2 & check all Authorities in case any Blade evacuation in-progress or completed \tn % Row Count 12 (+ 4) % Row 14 \SetRowColor{LightBackground} exec.py -na 'zgrep "Segmentation fault" /logs/nfs.log-{[}0-1{]}*' & Check for any SEGFAULTS in NFS logs (Need to understand what is SEGFAULT) \tn % Row Count 16 (+ 4) % Row 15 \SetRowColor{white} exec.py -na 'zgrep "segfault" /logs/system.log' & Check for any SEGFAULTS in System logs \tn % Row Count 19 (+ 3) % Row 16 \SetRowColor{LightBackground} exec.py -na "zgrep \seqsplit{'root::rpc\_service.tcp\_throttle\_avail\_slots'} /logs/nfs.log | tail -n1" & verify for any RPC slots exhaustion \tn % Row Count 24 (+ 5) % Row 17 \SetRowColor{white} atopen "log filename" & To check the process utilization \tn % Row Count 26 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Blade tools and commands}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{{\bf{fbhealth}}} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{{\bf{fbdiag}}} \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{{\bf{exec.py}}} \tn % Row Count 3 (+ 1) % Row 3 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{{\bf{fbupgrade}}} \tn % Row Count 4 (+ 1) % Row 4 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{{\bf{fbadmin}}} \tn % Row Count 5 (+ 1) % Row 5 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{{\bf{supervisorctl}}} \tn % Row Count 6 (+ 1) % Row 6 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{{\bf{ ir\_version}}} \tn % Row Count 7 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{HAL Commands}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{{\bf{hal-slot }} \newline % Row Count 1 (+ 1) Used to list, discover hardware such as PSU, fan, QSFP, EFM and blades, is also used to start and stop blades \newline % Row Count 4 (+ 3) hal-slot -l \newline % Row Count 5 (+ 1) hal-slot -{}-discover-all \newline % Row Count 6 (+ 1) hal-slot -e /local/slot/slot-blade-4 -{}-start \newline % Row Count 7 (+ 1) hal-slot -e /local/slot/slot-blade-4 -{}-stop \newline % Row Count 8 (+ 1) {\bf{hal-show}} \newline % Row Count 9 (+ 1) Used to show the rpc query result for one specified entry, this can be used on EFM to query the info on blade or other devices shown in the list of "hal-slot -l" \newline % Row Count 13 (+ 4) hal-show -e /local/gpio \newline % Row Count 14 (+ 1) hal-show -e /local/i2c-bus \newline % Row Count 15 (+ 1) hal-show -e /local/i2c \newline % Row Count 16 (+ 1) hal-show -e \seqsplit{/local/slot/slot-blade-4/module/gpio} \newline % Row Count 17 (+ 1) {\bf{hal-i2c}} \newline % Row Count 18 (+ 1) used to do raw i2c read/write from/to I2C device on given i2c bus, using "hal-show -e /local/i2c" to find out the I2C device address and the bus entry for target I2C device \newline % Row Count 22 (+ 4) hal-i2c -e \seqsplit{/local/i2c-bus/bus\_entry} -{}-addr xx -{}-offset xx -{}-read xx(number of bytes) \newline % Row Count 24 (+ 2) hal-i2c -e \seqsplit{/local/i2c-bus/bus\_entry} -{}-addr xx -{}-offset xx -{}-write xx xx xx \newline % Row Count 26 (+ 2) {\bf{hal-eeprom}} \newline % Row Count 27 (+ 1) Used to read the eeprom contents \newline % Row Count 28 (+ 1) hal-eeprom -e /local/eeprom/id -r \newline % Row Count 29 (+ 1) hal-upgrade% Row Count 30 (+ 1) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{FUSE commands}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{{\bf{ \# Failng to RA or VATS PUSH/PULL , run below commands from FUSE}} \newline % Row Count 2 (+ 2) export \seqsplit{PURELOGIN\_KEY\_TYPE=ed25519} \newline % Row Count 3 (+ 1) {\bf{\#How to push latest FBtools from FUSE to Customer array }} \newline % Row Count 5 (+ 2) fb auto fbtools% Row Count 6 (+ 1) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} p{0.4977 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{FB array commands}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{} \tn % Row Count 0 (+ 0) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{2.4885 cm} x{2.4885 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{FB Network commands}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{purelag list} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{purenetwork list} \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{puresubnet list} \tn % Row Count 3 (+ 1) % Row 3 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{transcievers.py} \tn % Row Count 4 (+ 1) % Row 4 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{switch\_shell.py ps} \tn % Row Count 5 (+ 1) % Row 5 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{purehw list -{}-type eth} \tn % Row Count 6 (+ 1) % Row 6 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{rpc.py -p switch get\_port\_stats | jq .} \tn % Row Count 7 (+ 1) % Row 7 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{lldpcli show neigh} \tn % Row Count 8 (+ 1) % Row 8 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{bdiag net-health} \tn % Row Count 9 (+ 1) % Row 9 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{switch\_shell.py vlan show | grep} \tn % Row Count 10 (+ 1) % Row 10 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{switch\_shell.py l3 multipath show} \tn % Row Count 11 (+ 1) % Row 11 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{switch\_shell.py vlan translate show} \tn % Row Count 12 (+ 1) % Row 12 \SetRowColor{LightBackground} rpc.py -p switch get\_xcver | jq . & Check transceiver is installed in the slot \tn % Row Count 15 (+ 3) % Row 13 \SetRowColor{white} \seqsplit{SWITCHSTATS=\$(rpc.py} -p switch \seqsplit{get\_port\_stats);for} x in \{1..4\}; do echo qsfp \$x/1-4; for y in \{1..4\}; do echo \$SWITCHSTATS | jq '.{[}"qsfp'\$x'/'\$y'"{]}' | grep 'link\_status' ; done ;done & Check the Link status of individual QSFP's \tn % Row Count 25 (+ 10) % Row 14 \SetRowColor{LightBackground} lldpcli show neighbor | egrep 'qsfp|ifname' & Identify ports on the TOR switches connecting to the FlashBlade \tn % Row Count 29 (+ 4) % Row 15 \SetRowColor{white} \seqsplit{monitor\_portstats.py} & Check life statistics on all interfaces \tn % Row Count 31 (+ 2) \end{tabularx} \par\addvspace{1.3em} \vfill \columnbreak \begin{tabularx}{5.377cm}{x{2.4885 cm} x{2.4885 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{FB Network commands (cont)}} \tn % Row 16 \SetRowColor{LightBackground} exec.py -sa "fbdiag monitor-portstats -{}-monitor err -{}-once" & Monitor errors on ports \textless{}Muti chassis\textgreater{} \tn % Row Count 4 (+ 4) % Row 17 \SetRowColor{white} purehw connector list -{}-cli & To show the Ethernet port details \tn % Row Count 6 (+ 2) % Row 18 \SetRowColor{LightBackground} tgrep -aE "link status|LACP port|partner state" {\emph{{[}af{]}m?/platform}} | egrep -i "up|down" & from FUSE to check any port flappings \tn % Row Count 11 (+ 5) % Row 19 \SetRowColor{white} zgrep -v " INFO " {\emph{{[}af{]}m?/platform}} | egrep -B1 -A40 " FCS " | less & from FUSE to check for any FCS errors \tn % Row Count 15 (+ 4) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} p{0.4977 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Log file location}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{} \tn % Row Count 0 (+ 0) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} p{0.4977 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Files and locations}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{} \tn % Row Count 0 (+ 0) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Upgrade related Doubts}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{{\bf{ Pre-upgrade health check failures }} \newline % Row Count 1 (+ 1) ECMP inconsistency issue \newline % Row Count 2 (+ 1) exec.py -xa -sa "switch\_shell.py l3 egress show" ( check for the refcount is same across chassis , if there is +1 or -1 difference is acceptable) \newline % Row Count 5 (+ 3) {\bf{Where is the Purity Images kept in FUSE?}} \newline % Row Count 6 (+ 1) All versions live on fuse in: \seqsplit{/support/flashblade/releases} \newline % Row Count 8 (+ 2) {\bf{What are the three stages of an NDU?}} \newline % Row Count 9 (+ 1) "FlashBlade Upgrade Stage 1: Gather System Information" \newline % Row Count 11 (+ 2) "FlashBlade Upgrade Stage 2: Upgrade Images" \newline % Row Count 12 (+ 1) "FlashBlade Upgrade Stage 3: Software Restart and Reboot" \newline % Row Count 14 (+ 2) {\bf{ How to check the upgrade logs ? }} \newline % Row Count 15 (+ 1) Upgrade logs are recorded under /logs \newline % Row Count 16 (+ 1) {\emph{* extend RA }}8 \newline % Row Count 17 (+ 1) then first go to master fm and type sudo tmux \newline % Row Count 18 (+ 1) this should start a tmux session. \newline % Row Count 19 (+ 1) once the tmux session is on run puresupport disconnect ; sleep 20 ; puresupport connect ; exit \newline % Row Count 21 (+ 2) this will disable the RA and then again re-enable for you. \newline % Row Count 23 (+ 2) less -r \seqsplit{fbupgrade.log.2022-03-27.07-17-01.gz} |tail \newline % Row Count 25 (+ 2) {\bf{If you are disconnected from tmux, how do you reconnect to it?}} \newline % Row Count 27 (+ 2) sudo tmux attach elasticity \newline % Row Count 28 (+ 1) {\bf{How do you drop out of a tmux session?}} \newline % Row Count 29 (+ 1) Ctrl-b d \newline % Row Count 30 (+ 1) } \tn \end{tabularx} \par\addvspace{1.3em} \vfill \columnbreak \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Upgrade related Doubts (cont)}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{{\bf{ How to disconnect console session }} \newline % Row Count 1 (+ 1) CTRL+SHIFT+e and c and . \newline % Row Count 2 (+ 1) {\bf{ Extend RA }} \newline % Row Count 3 (+ 1) then first go to master fm and type sudo tmux \newline % Row Count 4 (+ 1) this should start a tmux session. \newline % Row Count 5 (+ 1) once the tmux session is on run puresupport disconnect ; sleep 20 ; puresupport connect ; exit \newline % Row Count 7 (+ 2) this will disable the RA and then again re-enable for you. \newline % Row Count 9 (+ 2) {\bf{ How to start simple http server }} \newline % Row Count 10 (+ 1) The "python -m SimpleHTTPServer" command is used to launch a basic HTTP server in the current working directory using Python 2. \newline % Row Count 13 (+ 3) When you run this command, Python will start a web server on port 8000 and serve the files in the current directory as static web pages. \newline % Row Count 16 (+ 3) Here's how to use it: \newline % Row Count 17 (+ 1) Open a terminal or command prompt in the directory where you want to serve files. \newline % Row Count 19 (+ 2) Run the command "python -m SimpleHTTPServer" or "python2 -m SimpleHTTPServer" (depending on your Python version). \newline % Row Count 22 (+ 3) The server will start and you'll see a message like "Serving HTTP on 0.0.0.0 port 8000". \newline % Row Count 24 (+ 2) Open a web browser and navigate to "http://localhost:8000" to see the files being served. \newline % Row Count 26 (+ 2) Note that this command is intended for testing and development purposes only and should not be used in production environments. Also, if you're using Python 3, the command has been changed to "python -m http.server" or "python3 -m http.server".% Row Count 31 (+ 5) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}