This is a followup to the 1994 tutorial by Berkeley RAID researchers whose 1988 RAID paper foresaw a revolutionary change in storage industry based on advances in magnetic disk technology, i.e., replacement of large capacity expensive disks with arrays of small capacity inexpensive disks. NAND flash SSDs which use less power, incur very low latency, provide high bandwidth, and are more reliable than HDDs are expected to replace HDDs as their prices drop. Replication in the form of mirrored disks and erasure coding via parity and Reed-Solomon codes are two methods to achieve higher reliability through redundancy in disk arrays. RAID(4+k), k=1,2,... arrays utilizing k check strips makes them k-disk-failure-tolerant with maximum distance separable coding with minimum redundancy. Clustered RAID, local recovery codes, partial MDS, and multilevel RAID are proposals to improve RAID reliability and performance. We discuss RAID5 performance and reliability analysis in conjunction with HDDs w/o and with latent sector errors -LSEs, which can be dealt with by intradisk redundancy and disk scrubbing, the latter enhanced with machine learning algorithms. Undetected disk errors causing silent data corruption are propagated by rebuild. We utilize the M/G/1 queueing model for RAID5 performance evaluation, present approximations for fork/join response time in degraded mode analysis, and the vacationing server model for rebuild analysis. Methods and tools for reliability evaluation with Markov chain modeling and simulation are discussed. Queueing and reliability analysis are based on probability theory and stochastic processes so that the two topics can be studied together. Their application is presented here in the context of RAID arrays in a tutorial manner.