草庐IT

lvcreate 创建逻辑卷、vgcreate 创建卷组、pvcreate 创建物理卷、vgextend 扩容卷组、lv缩容

MssGuo 2023-08-26 原文

目录

pvcreate 创建物理卷

pvcreate 命令用于创建物理卷,即创建PV,这是lvm技术里常用的一个命令,其语法格式如下:

#可以直接将一块磁盘或磁盘分区进行格式为pv,直接将磁盘格式化为pv没必要分区
pvcreate [option] /dev/sdb  /dev/sdc1	

常用参数:
无,一般可不用写参数。

演示示例:

[root@localhost ~]# pvcreate  /dev/sdb /dev/sdc 				#直接将磁盘或某个分区转化为物理卷,
  Physical volume "/dev/sdb" successfully created.
  Physical volume "/dev/sdc" successfully created.
[root@localhost ~]# pvs											#查看有哪些物理卷
  PV         VG Fmt  Attr PSize  PFree
  /dev/sda2  cl lvm2 a--  11.00g 4.00m
  /dev/sdb      lvm2 ---   8.00g 8.00g
  /dev/sdc      lvm2 ---   6.00g 6.00g

vgcreate 创建卷组

vgcreate 命令用于创建卷组,这是lvm技术中最常用的一个命令,语法格式如下:

vgcreate [参数]  卷组名    物理卷1 物理卷2 .....

常用参数:

-s   指定物理卷中PE的大小,PE可取值 4M(默认值)、8M、16M、32M、64M

演示示例:

[root@localhost ~]# vgcreate my_data /dev/sdb /dev/sdc	#创建一个名为my_data的卷组并将sdb和sdc物理卷加入其中,PE的大小默认为4M

lvcreate 创建逻辑卷

lvcreate 命令用于创建逻辑卷,这是lvm技术中最常用的命令,其语法格式如下:

lvcreate [参数] 卷组名

ps:lvcreate创建一个逻辑卷需要指定卷组,表示在哪个卷组之上创建逻辑卷;

常用参数:

-n :指定逻辑卷名称,如 -n lv_data ;
-L :指定逻辑卷的大小,如 -L 10G,单位可以是bBsSkKmMgGtTpPeE;
-l :使用LE个数来指定逻辑卷的大小,如 -l 200,表示使用200个LE来创建逻辑卷,一般的我们最常用的是-L 来直接指定逻辑卷大小即可。这里重点
说明LE是什么,PE是在卷组中的叫法,而LE是在逻辑卷中的叫法,两者是一一对应的。
-l参数还有一种直接使用剩余空间的百分比的形式来给定大小,如 -l +100%FREE

演示示例:

[root@localhost ~]# vgs			#先查看有哪些卷组,如下,系统有两个卷组,已经在cl上创建了2个lv,my_data卷组还没创建lv
  VG      #PV #LV #SN Attr   VSize  VFree 
  cl        1   2   0 wz--n- 11.00g  4.00m
  my_data   2   0   0 wz--n- 13.99g 13.99g

[root@localhost ~]# lvcreate -n lv_data -L 6G  my_data		#在my_data卷组上创建一个名称叫lv_data的10G的逻辑卷
  Logical volume "lv_data" created.
[root@localhost ~]# 

重点:
当我们lvcreate创建一个逻辑卷的时候,其实相当于生成了一个磁盘设备文件,这是由lvm的mapper机制决定,Linux会新建两个软链接文件,如/dev/vg_name/lv_name、/dev/mapper/vg_name-lv_name,而这2个文件都是指向/dev/dm-X 块设备文件的,所以,当我们使用df -h看到的/dev/mapper/vg_name-lv_name的时候,这个其实就是和/dev/vg_name/lv_name一样的,都是指向/dev/dm-X 块设备文件的。

下面我们来看一下安装Linux系统时默认创建的逻辑卷,如下:

ot@my_data ~]# df -h | grep mapper
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/cl-root   57G   34G   23G  60% /							#根分区就是逻辑卷

[root@my_data ~]# ll /dev/cl/root 										#发现该逻辑卷实际就是dm-0块设备文件
lrwxrwxrwx 1 root root 7 2022-01-29 21:12 /dev/cl/root -> ../dm-0
[root@my_data ~]# ll /dev/mapper/cl-root								#发现该逻辑卷实际就是dm-0块设备文件
lrwxrwxrwx 1 root root 7 2022-01-29 21:12 /dev/mapper/cl-root -> ../dm-0
[root@my_data ~]# 

mkfs 格式化分区并创建文件系统

mkfs 命令用于格式化分区并创建文件系统,mkfs是make filesystem的缩写,其语法格式如下:

 mkfs [options] [-t <type>] [fs-options] <device> [<size>]

主要参数:

-t, --type= 指定文件系统的类型;
-V 可视化,输出详细过程;

演示示例:

mkfs -t ext4 /dev/sda1				#格式化磁盘分区为ext4文件系统
mkfs -t xfs	/dev/my_data/lv_data	#对上面刚才创建的lv进行格式化并创建xfs类型的文件系统

注意:mkfs命令只是一个综合命令,它会调用正确的文件系统格式化工具,也就是说当你输入mkfs [tab][tab] ,会发现有很多类似的格式化命令。如mkfs mkfs.cramfs mkfs.ext3 mkfs.fat mkfs.msdos mkfs.xfs mkfs.btrfs mkfs.ext2 mkfs.ext4 mkfs.minix kfs.vfat
不同的文件系统类型需使用不同的命令,如xfs类型的使用mkfs.xfs,ext4的使用mkfs.ext4,这要根据根分区的文件系统类型决定,其实,mkfs -t [文件系统格式名]===>等同于mkfs.文件系统格式名,即mkfs -t xfs 与 mkfs.xfs相同。这里就不在讲解其他类似的命令了。

mount挂载

#使用mkfs创建好文件系统后就可以挂载使用了
mkdir /data
mount /dev/my_data/lv_data /data

pvs、pvdisplay、pvscan 查看物理卷信息

pvs、pvdisplay、pvscan 这三个命令都可以查看系统中有哪些物理卷PV,其输入的信息详细情况有所不同而已,语法格式如下:

pvs [参数]
pvdisplay  [参数]
pvscan  [参数]

一般都不用写参数;

演示示例:

[root@localhost ~]# pvs											#pvs查看物理卷信息
  PV         VG Fmt  Attr PSize  PFree
  /dev/sda2  cl lvm2 a--  11.00g 4.00m
  /dev/sdb      lvm2 ---   8.00g 8.00g
  /dev/sdc      lvm2 ---   6.00g 6.00g
[root@localhost ~]# pvdisplay									#pvdisplay更加详细查看物理卷信息
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               cl
  PV Size               11.00 GiB / not usable 3.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              2815
  Free PE               1
  Allocated PE          2814
  PV UUID               oYhjES-MvEK-hfi1-cmno-INK2-vTtz-O80PNJ
   
  "/dev/sdb" is a new physical volume of "8.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name               
  PV Size               8.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               mn3meS-mPlJ-nQoA-hdEs-3kdl-85zO-f72vQO
   
  "/dev/sdc" is a new physical volume of "6.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc
  VG Name               
  PV Size               6.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               3u6yis-jF6t-czmS-Rj2i-ghlt-ntP8-IR0T2t
   
[root@localhost ~]# pvscan												#pvscan较为详细的查看物理卷信息
  PV /dev/sda2   VG cl              lvm2 [11.00 GiB / 4.00 MiB free]
  PV /dev/sdb                       lvm2 [8.00 GiB]
  PV /dev/sdc                       lvm2 [6.00 GiB]
  Total: 3 [25.00 GiB] / in use: 1 [11.00 GiB] / in no VG: 2 [14.00 GiB]
[root@localhost ~]# 

vgs、vgdisplay、vgscan 查看卷组

vgs、vgdisplay、vgscan 这3个命令都可以查看卷组的信息,输出内容有详细简略之分而已,其语法格式如下:

vgs [参数]
vgdisplay [参数]
vgscan   [参数]

参数:
一般不用写参数,不指定卷组默认输出全部卷组信息。

演示示例:

root@localhost ~]# vgs								#查看卷组信息,输出信息较为简单
  VG      #PV #LV #SN Attr   VSize  VFree 
  cl        1   2   0 wz--n- 11.00g  4.00m
  mydb   2   0   0 wz--n- 13.99g 13.99g
[root@localhost ~]# vgdisplay						#查看卷组信息,输出信息最详细
  --- Volume group ---
  VG Name               mydb
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               13.99 GiB
  PE Size               4.00 MiB
  Total PE              3582
  Alloc PE / Size       0 / 0   
  Free  PE / Size       3582 / 13.99 GiB
  VG UUID               wj0tKh-yRKD-dtPd-2JHI-R5X6-vf4r-G2t4R2
   
  --- Volume group ---
  VG Name               cl
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               11.00 GiB
  PE Size               4.00 MiB
  Total PE              2815
  Alloc PE / Size       2814 / 10.99 GiB
  Free  PE / Size       1 / 4.00 MiB
  VG UUID               z8fFwU-5ZTc-mAN4-C3Mj-U1Ty-sYxp-40aKSF
   
[root@localhost ~]# vgscan										#查看卷组信息,输出信息最简单
  Reading volume groups from cache.
  Found volume group "mydb" using metadata type lvm2
  Found volume group "cl" using metadata type lvm2
[root@localhost ~]# 

lvs、lvdisplay、lvscan 查看逻辑卷

lvs、lvdisplay、lvscan 命令用于查看逻辑卷信息,语法格式如下:

lvs [参数]
lvdisplay [参数]
lvscan   [参数]

常用参数:
一般不用写参数,默认输出显示全部的逻辑卷信息。

演示示例:

[root@localhost ~]# lvs							#查看系统中全部逻辑卷信息,输出信息较为详细
  LV      VG      Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root    cl      -wi-ao---- 9.79g                                                    
  swap    cl      -wi-ao---- 1.20g                                                    
  lv_data my_data -wi-a----- 6.00g                                                    
[root@localhost ~]# lvdisplay					#查看系统中全部逻辑卷信息,输出信息最为详细
  --- Logical volume ---
  LV Path                /dev/my_data/lv_data	#当创建一个lv时,系统会自动在/dev/下以vg名字和lv名字创建一个文件
  LV Name                lv_data
  VG Name                my_data
  LV UUID                5NG9C1-O5GU-oLEf-Dxok-lMdZ-klfA-JpSBN6
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2021-09-25 16:25:12 +0800
  LV Status              available
  # open                 0
  LV Size                6.00 GiB
  Current LE             1536
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2
   
  --- Logical volume ---
  LV Path                /dev/cl/swap
  LV Name                swap
  VG Name                cl
  LV UUID                y5kxXD-75vw-amAS-2Doe-u1SI-FQ30-scHOfD
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2021-09-25 14:02:19 +0800
  LV Status              available
  # open                 2
  LV Size                1.20 GiB
  Current LE             307
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1
   
  --- Logical volume ---
  LV Path                /dev/cl/root
  LV Name                root
  VG Name                cl
  LV UUID                mQuBmu-3HVs-Fb04-A1YA-2gHN-4t10-mPTlPF
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2021-09-25 14:02:19 +0800
  LV Status              available
  # open                 1
  LV Size                9.79 GiB
  Current LE             2507
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
   
[root@localhost ~]# lvscan										#查看系统中全部逻辑卷信息,输出信息最为简单
  ACTIVE            '/dev/my_data/lv_data' [6.00 GiB] inherit
  ACTIVE            '/dev/cl/swap' [1.20 GiB] inherit
  ACTIVE            '/dev/cl/root' [9.79 GiB] inherit
[root@localhost ~]# 

注意:当我们创建一个lv时,系统会自动在/dev/下以vg名字和lv名字创建一个文件,如/dev/my_data/lv_data,这就是为什么我们在dev下会看到有一个/dev/cl/root文件的缘由了,然后实际上,/dev/cl/root是一个软链接,链接到/dev/dm-Xdm-X才真正是一个块文件。

vgextend 扩容卷组,即把物理卷加入卷组

vgextend 命令用于扩容卷组大小,其语法格式如下:

vgextend [参数] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath ...]

常用参数:
无,一般不用接参数;

演示示例:

#vgextend 命令把sdd1物理卷加入my_data卷组(sdd1已经是物理卷了,my_data是卷组名称)
[root@localhost /]# vgextend my_data /dev/sdd1	

lvextend 逻辑卷扩容(xfs_growfs、resize2fs配合扩展文件系统)

查看另一篇:《lvextend 逻辑卷扩容(xfs_growfs、resize2fs配合扩展文件系统)》https://editor.csdn.net/md/?articleId=120475752

lv缩容

缩容lv一般是腾出空间给同vg的其他lv,这并不是一种安全的做法,一般情况下没有人会这么干,一般当lv卷磁盘空间满的时候,会加磁盘来扩容,而不是从同vg下的其他lv腾空间出来,这里仅做出示例:

umount /dev/mapper/my_data-lv_data				#卸载lv
e2fsck -f /dev/mapper/my_data-lv_data			#先扫描、检查磁盘在执行resize2fs,不然它会提示你先执行e2fsck -f命令的
resize2fs /dev/mapper/my_data-lv_data 100G		#缩容文件系统到100G
lvreduce -L 100G /dev/mapper/my_data-lv_data	#缩容,lv到100G,此时vg就空闲了很多PE出来了,可以通过vgdisplay命令查看
lvreduce -L -100G /dev/mapper/my_data-lv_data	#缩容,lv缩减100G,此时vg就空闲了很多PE出来了,可以通过vgdisplay命令查看
mount /dev/mapper/my_data-lv_data /my_data/		#重新挂载,此时文件系统就是100G大小

#以上缩容发现,一个是需要卸载,这点可以影响业务,其次缩容后重新挂载,原来的文件仍存在,没有丢失。

#下面是一个例子
/dev/mapper/vg--data-lv1T 1008G   77M  957G   1% /gpt1
/dev/mapper/vg--data-lv2   2.0T   81M  1.9T   1% /gpt2
[root@kubernetes ~]# vgs
  VG      #PV #LV #SN Attr   VSize   VFree
  centos    1   2   0 wz--n- <19.00g    0 
  vg-data   1   2   0 wz--n-  <3.00t    0 
[root@kubernetes ~]# lvdisplay /dev/vg-data/lv1T /dev/vg-data/lv2
  --- Logical volume ---
  LV Path                /dev/vg-data/lv1T
  LV Name                lv1T
  VG Name                vg-data
  LV UUID                oYtQ0a-hUQA-pVkK-e8iy-NFam-eRs4-PrMsZW
  LV Write Access        read/write
  LV Creation host, time kubernetes, 2023-03-29 10:20:33 +0800
  LV Status              available
  # open                 1
  LV Size                1.00 TiB
  Current LE             262144
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2
   
  --- Logical volume ---
  LV Path                /dev/vg-data/lv2
  LV Name                lv2
  VG Name                vg-data
  LV UUID                APJ81S-hOEC-LCfp-Oamo-5OTk-C8pA-GLhN2L
  LV Write Access        read/write
  LV Creation host, time kubernetes, 2023-03-29 10:21:08 +0800
  LV Status              available
  # open                 1
  LV Size                <2.00 TiB
  Current LE             524287
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3
[root@kubernetes ~]# 

#打算对/gpt1缩减100G,腾出空间给/gpt2:
umount  /gpt1
e2fsck -f  /dev/mapper/vg--data-lv1T
#注意这条命令是缩减文件系统到多少G,957-100=857
resize2fs /dev/mapper/vg--data-lv1T  857G

#重新挂载,现在是844G
mount /dev/mapper/vg--data-lv1T /gpt1/
[root@kubernetes ~]# df -h
Filesystem                 Size  Used Avail Use% Mounted on
/dev/mapper/vg--data-lv1T  844G   77M  801G   1% /gpt1


# 文件系统缩减了但是lv没有缩减呀,你看看:
[root@kubernetes ~]# lvdisplay /dev/mapper/vg--data-lv1T
  --- Logical volume ---
  LV Path                /dev/vg-data/lv1T
  LV Name                lv1T
  VG Name                vg-data
  LV UUID                oYtQ0a-hUQA-pVkK-e8iy-NFam-eRs4-PrMsZW
  LV Write Access        read/write
  LV Creation host, time kubernetes, 2023-03-29 10:20:33 +0800
  LV Status              available
  # open                 1
  LV Size                1.00 TiB			#和没缩减文件系统时一模一样
  Current LE             262144			#和没缩减文件系统时一模一样
  Segments               1	
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2
   
# 所以现在开始缩减lv,这里我们写-100G
lvresize -L -100G  /dev/vg-data/lv1T

#缩减成功,但是好像不对,lv显示924G,挂载之后的文件系统怎么才844G
[root@kubernetes ~]# lvdisplay /dev/mapper/vg--data-lv1T
  --- Logical volume ---
  LV Path                /dev/vg-data/lv1T
  LV Name                lv1T
  VG Name                vg-data
  LV UUID                oYtQ0a-hUQA-pVkK-e8iy-NFam-eRs4-PrMsZW
  LV Write Access        read/write
  LV Creation host, time kubernetes, 2023-03-29 10:20:33 +0800
  LV Status              available
  # open                 1
  LV Size                924.00 GiB
  Current LE             236544
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2
 
[root@kubernetes ~]# vgs	#vg多了100G
  VG      #PV #LV #SN Attr   VSize   VFree  
  vg-data   1   2   0 wz--n-  <3.00t 100.00g
  
[root@kubernetes ~]# df -h /dev/vg-data/lv1T
Filesystem                 Size  Used Avail Use% Mounted on
/dev/mapper/vg--data-lv1T  844G   77M  801G   1% /gpt1
[root@kubernetes ~]# 重新卸载重新挂载也是一样的,怎么回事?

lvremove 删除逻辑卷

lvremove 命令用于删除逻辑卷,当一个逻辑卷不再需要之后,可以把它删除,其语法格式如下:

lvremove  [参数]   lv名或lv路径

常用参数;
无,一般不需要接参数;

演示示例:

[root@localhost ~]# umount  /dev/mapper/my_data-lv_data			#删除一个lv之前必须先卸载文件系统
[root@localhost ~]# lvremove /dev/my_data/lv_data				#删除逻辑卷,如果不知道lv的路径,可以通过lvdisplay命令查看
Do you really want to remove active logical volume my_data/lv_data? [y/n]: y
  Logical volume "lv_data" successfully removed

vgremore 删除卷组

vgremore 命令用于删除卷组,当不再不需要某个卷组之后,可以删除卷组,语法格式如下;

vgremove [参数]  VolumeGroupName

常用参数:

无,一般不需要参数;

演示示例:

[root@localhost ~]# vgremove  my_data					#删除整个卷组
Do you really want to remove volume group "my_data" containing 1 logical volumes? [y/n]: y
  Volume group "my_data" is removed

pvremore删除物理卷

pvremore 命令用于删除物理卷,当不再不需要某个物理卷之后,可以删除物理卷,语法格式如下;

pvremove [参数]  PhysicalVolume

常用参数:
无,一般不需要参数;

演示示例:

#删除物理卷,该物理卷必须从vg中卸载下来,使用vgreduce my_data /dev/sdd1卸载即可
[root@localhost ~]# pvremove /dev/sdd1
  Removed "/dev/sdd1" from volume group "my_data"

有关lvcreate 创建逻辑卷、vgcreate 创建卷组、pvcreate 创建物理卷、vgextend 扩容卷组、lv缩容的更多相关文章

  1. ruby - 如何在 Ruby 中顺序创建 PI - 2

    出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits

  2. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  3. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  4. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  5. ruby - 如何使用 RSpec::Core::RakeTask 创建 RSpec Rake 任务? - 2

    如何使用RSpec::Core::RakeTask初始化RSpecRake任务?require'rspec/core/rake_task'RSpec::Core::RakeTask.newdo|t|#whatdoIputinhere?endInitialize函数记录在http://rubydoc.info/github/rspec/rspec-core/RSpec/Core/RakeTask#initialize-instance_method没有很好的记录;它只是说:-(RakeTask)initialize(*args,&task_block)AnewinstanceofRake

  6. ruby - 为什么 SecureRandom.uuid 创建一个唯一的字符串? - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?

  7. ruby - 有人可以帮助解释类创建的 post_initialize 回调吗 (Sandi Metz) - 2

    我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法

  8. ruby - 使用多个数组创建计数 - 2

    我正在尝试按0-9和a-z的顺序创建数字和字母列表。我有一组值value_array=['0','1','2','3','4','5','6','7','8','9','a','b','光盘','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','','u','v','w','x','y','z']和一个组合列表的数组,按顺序,这些数字可以产生x个字符,比方说三个list_array=[]和一个当前字母和数字组合的数组(在将它插入列表数组之前我会把它变成一个字符串,]current_combo['0','0','0']

  9. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  10. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

随机推荐