Skip to main content

· One min read
Spark light
#add a share conf
echo "/multi-example 192.168.1.0/24(rw) 172.16.1.0/24(ro) 10.11.12.0/24(rw)" >> /etc/exports
#check config
exportfs -a
#server reload
/etc/init.d/nfs-kernel-server reload
#check nfs ver support status
cat /proc/fs/nfsd/versions
#test nfs mount
mount 192.168.1.100:/example /mnt/example
#if remote mount stuck, check iptable/ufw
#nfs need port: tcp port 111, 2049, 4000-4004 udp port 4001
ufw disable

nfs mac client

  • In the Finder > Go > Connect to server window, specify:
    #need add line "nfs.client.mount.options = vers=4.0" to /etc/nfs.conf
    nfs://192.168.0.51:/<share_full_path>/
  • or without modify /etc/nfs/conf for vers 4 refs
    nfs://vers=4,nuc.local:/mnt/tb
    nfs://vers=4,nuc.local:/mnt/tb
    nfs://vers=4,rw,192.168.1.3:/mnt/sgex16data
    rw
  • mount -t nfs -o vers=4.0 192.168.0.51:/<share_full_path>/ /mnt/nfs
  • mount -t nfs -o soft,timeo=900,retrans=3,vers=3,proto=tcp nas01:/sales /private/sales
  • nfsstat -m

refs

· 6 min read
Spark light

摘自

接口线相关常识

  • 电源线颜色一般符合规范 黄yellow:12v 红red:5v 橙色orange3.3v 黑灰black:GND

  • 参考 SATA_Pinout

  • http://www.interfacebus.com/Design_Connector_Serial_ATA.html

  • SATA数据接口L形插7口孔 L从上到下编号1-7的分别是(1:GND,2:A+,3:A-,4:GND,5:B-,6:B+,7:GND) A is transmit

  • SATA电源接口L形插15口孔 L从上到下编号15-1分别是(15,14,13:12V)(12,11,10:GND),(9,8,7:5V),(6,5,4:GND),(3,2,1:3.3V)

  • PATA电源线(俗称大4D口 4Pin)

    Sata Data 7Pin Sata Power 15Pin

网络存储接口简介

主流的硬盘对接接口是sata接口和M2接口(其他接口: IDE,SCSI), (SAS,Fibre Channel企业服务级使用的)

主板上也提供1-4个sata接口进行对接,也提供少量的M.2接口进行对接(主板M2接口一般是让设备平躺在主板上进行安装的, 所以说,能安装的M2接口的设备的尺寸一定要跟主板上预留的M2安装空间相匹配)

主板上也提供PCIE接口 一般购买PCIE扩展卡 可以扩展出更多sata接口和M.2接口, 用于存储设备的连接

也有M2接口扩展卡扩展出多个SATA接口的转接卡

M2接口的传输速率比SATA接口的传输速率高很多, 主流的笔记本主存储方案都是用的M2接口连接SSD固态硬盘

但是在大容量扩展扩展存储,或者是网络存储方案中, 主流还是使用SATA接口的硬盘设备。 个人猜测,主要原因还是SATA的抗干扰能力比较强,可以使用软性连接,或者是扩展卡进行比较长的走线,然后扩展出更多的硬盘设备, 同时,现在主流的超大容量(2T-18T) 机械硬盘里提供的是SATA接口进行连接, SSD固态硬盘可以提供SATA和M2两种接口形式进行连接

网络存储从接口协议上进行分类

  • NVMe #给固态硬盘设计的传输协议,可以吧PCIE总线性能拉满
  • AHCI:Advanced Host Controller Interface #给机械硬盘设计的传输协议

PCIE为什么这么牛

因为他可以跳过(慢速度的)南桥芯片组直连北桥,和内存RAM同等待遇, 但也有吧PCIE链接到南桥芯片上的主板应该会损失性能 参见[https://en.wikipedia.org/wiki/Southbridge_(computing)] PCI-E to NorthBridge

网络存储方案选择考虑

在设计多盘为存储方案是, 比如4到8以上的盘位是, 由于机械硬盘功率消耗较高, 机箱电源功率上需要做特别考虑 一般NAS方案就是一个小型主机连接多个存储设备, 然后通过主机的网络接口, 使用软件对外提供存储服务, 普通的家用主机甚至是闲置,笔记本都听都可以提供类似的服务,只是在存储容量上会有些限制 如果还需要扩展出更多的存储, 拓展硬盘柜也是可以考虑, 可以看作是一个超大型的U盘(USB接口或者type-c接口), 必须连接额外的主机才能提供存储服务。 所以NAS+扩展机柜不失为一个好的选择 扩展硬盘柜比如: JMS576 和 JMB393 双主控芯片的方案

商用存储方案

在机房或者影视剧制作公司的存储方案上会采用光纤交换机连接存储设备, 接口上也会使用SAS和Fibre Channel链接

NAS主板

  • 映泰的j4105
  • asrock-j3455-itx

参考

· One min read
Spark light

· One min read
Spark light

git subtree is powerful, but it document is not easy find by search engine. if search git subtree you got many article but not the origin doc.

so may be search by: git subtree txt

here is core desc of git subtree documentaion:

git split

    Extract a new, synthetic project history from the
history of the <prefix> subtree of <local-commit>, or of
HEAD if no <local-commit> is given. The new history
includes only the commits (including merges) that
affected <prefix>, and each of those commits now has the
contents of <prefix> at the root of the project instead
of in a subdirectory. Thus, the newly created history
is suitable for export as a separate git repository.

so git subtree core

 # split all commit relative with in /subdir into a new branch "tmpbranch"
git subtree split --prefix subdir -b tmpbranch
# push this branch to new repo
git push git@github.com/xxx/newrepo tmpbranch:main

one shortcut cmd do same of above

git subtree push --prefix subdir  git@github.com/xxx/newrepo main

· 2 min read
Spark light

loopback interface是系统虚拟出来的一个接口。所以不会因为线路或接口问题而down掉

loopback interface一般是绑定的127.0.0.1回环地址(只用于本机系统内的地址)

loopback interface也可以绑定其他类型的ip,比如局域网ip或者公网ip,用于实现特殊目的

比如LVS的实现的后台服务器上(多个机器的loopback都设置为一个同样的ip)都可以对这个ip地址提供处理服务,而LVS的前端根据一定的分配策略将dest是这个ip的报文分发到这些机器上以后进行处理

在比如:bgp的peer对等体互联实现中多建议将 可达ip地址放在loopback interface上。并建议用此ip生成BGP Router ID

refs

· 4 min read
Spark light

FROM

raid(Redundant Array of Independent Disk)独立冗余磁盘阵列

  • 注意事项: raid存在于文件系统之下,对文件系统无感知,假如刚建立的raid阵列。就算存储了少量的文件。这个时更换硬盘或者从做某个阵列盘。都会导致整盘重新复制(无论你硬盘是满的还是空的!)

假设磁盘数量为n,单磁盘读写性能为x

raid读速度写速度冗余实现原理
raid0n*xxStripe/条带化/分块分布/多盘存储,以提高吞吐速度,无冗余备份
raid1(n/2)*xxn/2备/2Mirror 一个数据分开写两份
raid5(n-1)*xx/2(写操作同时需要带有读取和计算操作性能差)n-1备1分布式奇偶校验,n-1个份的数据,剩下1份是前n-1份的奇偶校验XOR汇总,用于n-1有一份丢失后的恢复计算,商业上用的最多
RAID6

raid实施

mdadm raid howto

create cmds

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdc2 /dev/sda2
mdadm --create /dev/md1 --level=10 --raid-devices=4 /dev/sd[b-e]1
mkfs.ext4 /dev/md0
e2label /dev/md0 raid1t
mount /dev/md0 /mnt/raid1t/
mdadm --detail --scan --verbose >> /etc/mdadm/mdadm.conf
mdadm --assemble --scan

check cmds

cat /proc/mdstat
cat /sys/block/md0/md/sync_action

mdadm --detail --scan --verbose
mdadm --detail /dev/md0 #check array
mdadm --examine /dev/sd[a-e] #check array item(component)
mdadm --examine /dev/sd[a-e]1

modify cmds

mdadm /dev/md0 --add /dev/sdc2
mdadm /dev/md0 --add /dev/sde2

mdadm /dev/md0 --fail /dev/sda2
mdadm /dev/md0 --remove /dev/sda2
mdadm /dev/md0 --add /dev/sda2

mdadm /dev/md0 --add /dev/sdd2

mdadm /dev/md0 --remove /dev/sdd2


mdadm --stop /dev/md0
mdadm --remove /dev/md0
mdadm --zero-superblock /dev/sdf1 /dev/sde1

other

if you not save mdadm to mdadm.conf, or move disk to other new machin mdadm --detail --scan --verbose, will name raid as /dev/md127 (external device start number) better try fix name /dev/md127 to /dev/md0 by: ref about md127

mdadm --assemble --scan
mdadm --detail --scan --verbose
mdadm --detail --scan --verbose >> /etc/mdadm/mdadm.conf
vi /etc/mdadm/mdadm.conf #modify md127 to md0,
update-initramfs -u
reboot

考虑结果

  • 数据库不考虑raid5 写性能差,可以考虑(多盘raid1)(mysql考虑异地replicate,一担某地数据丢失,考虑rsync恢复)
  • 重要文件长期存储可以考虑raid5,raid6,raid10
  • raid在文件系统之下(对文件系统无感知,比如10T的文件系统上只有1G的一个小文件,raid换盘加盘的恢复复制仍然是傻傻的全盘进行)

数据恢复软件

基于网络的raid:DRBD Distributed Replicated Block Device(DRBD)

是否有跨网raid1?(基于iscsi等)

fs 对比分析

btrfs
zfs
zfs

refs